vue移动端的左右滑动事件详解
作者:染蓝了天 时间:2024-06-05 09:20:33
本文实例为大家分享了vue移动端左右滑动事件,供大家参考,具体内容如下
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script src="https://unpkg.com/vue"></script>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta content="telephone=no" name="format-detection">
<style>
*{padding: 0;margin: 0;}
body {background: #EEEEEE;}
.box {text-align: center;}
.btn {
position: relative;
width: 70%;
height: 40px;
margin: 150px auto;
border-radius: 20px;
background: #333333;
}
.btn-move {
position: absolute;
left: 0;
top: 0;
width: 40px;
height: 40px;
border-radius: 20px;
background: #ededed;
}
.tt {
font-size: 20px;
color: #008000;
text-align: center;
margin-top: 50px;
}
</style>
</head>
<body>
<div id="box">
<slide-release></slide-release>
</div>
<script type="text/x-template" id="slide">
<div>
<div class="btn" ref='remove'>
<span ref='btnImg' class="btn-move"
@touchstart='touchStart'
@touchmove='touchMove'
@touchend='touchEnd'
:style="slideEffect"
>
</span>
</div>
<p class="tt" v-show="isShow">你滑动成功了!</p>
</div>
</script>
<script>
Vue.component('slide-release',{
template:'#slide',
data:function(){
return {
isShow:false,
startX:0,//开始触摸的位置
moveX:0,//滑动时的位置
endX:0,//结束触摸的位置
disX:0,//移动距离
slideEffect:'',//滑动时的效果,使用v-bind:style="deleteSlider"
}
},
methods:{
touchStart:function(ev) {
ev = ev || event;
ev.preventDefault();
// console.log(ev.targetTouches);
// console.log(ev.changedTouches);
if(ev.touches.length == 1) { //tounches类数组,等于1时表示此时有只有一只手指在触摸屏幕
this.startX = ev.touches[0].clientX; // 记录开始位置
}
},
touchMove:function(ev) {
ev = ev || event;
ev.preventDefault();
let btnWidth = this.$refs.remove.offsetWidth; //$refs 减少获取dom节点的消耗
let btnImg = this.$refs.btnImg.offsetWidth;
console.log(ev.targetTouches);
console.log(ev.changedTouches);
if(ev.touches.length == 1) {
//滑动时距离浏览器左侧的距离
this.moveX = ev.touches[0].clientX;
//实时的滑动的距离-起始位置=实时移动的位置
this.disX = this.moveX-this.startX;
if(this.disX<0 || this.disX == 0) {
this.slideEffect = 'transform:translateX(0px)';
}else if(this.disX>0){
this.slideEffect = 'transform:translateX('+this.disX+'px)';
// 最大也只能等于删除按钮宽度
if(this.disX>=btnWidth) {
this.slideEffect = 'transform:translateX('+(btnWidth-btnImg)+'px)';
}
}
}
},
touchEnd:function(ev){
ev = ev || event;
ev.preventDefault();
let btnWidth = this.$refs.remove.offsetWidth;
let btnImg = this.$refs.btnImg.offsetWidth;
// console.log(ev.changedTouches);
if(ev.changedTouches.length == 1) {
let endX = ev.changedTouches[0].clientX;
this.disX = endX-this.startX;
console.log(this.disX,'this.disX')
console.log((btnWidth/2),'btnWidth/2');
if(this.disX < (btnWidth/2)) {
this.slideEffect = 'transform:translateX(0px)';
}else {
this.slideEffect = "transform:translateX("+(btnWidth-btnImg)+ "px)";
//让字段显示出来,或者写你需要的逻辑
this.isShow = true
}
}
}
}
})
var vm = new Vue({
el:'#box',
})
</script>
</body>
</html>
关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。
更多vue学习教程请阅读专题《vue实战教程》
来源:https://blog.csdn.net/weixin_41578603/article/details/79637376
标签:vue,移动端,滑动
0
投稿
猜你喜欢
python正则表达式之对号入座篇
2021-03-31 17:59:55
不管你的Python报什么错,用这个模块就能正常运行
2023-08-29 14:42:43
python图片验证码识别最新模块muggle_ocr的示例代码
2021-03-28 11:49:26
Python学习之文件的创建与写入详解
2021-03-07 09:27:06
python机器学习理论与实战(一)K近邻法
2021-08-27 18:05:49
Python Django切换MySQL数据库实例详解
2024-01-21 02:02:47
python基础教程之自定义函数介绍
2021-09-12 13:10:24
Python中的__new__与__init__魔术方法理解笔记
2021-12-18 14:29:26
SQL如何使用正则表达式对数据进行过滤
2024-01-26 23:15:05
基于Python实现通过微信搜索功能查看谁把你删除了
2022-07-10 00:19:37
python生成以及打开json、csv和txt文件的实例
2023-08-05 10:44:49
Python实现批量下载音效素材详解
2021-09-19 02:08:27
python绘制简单折线图代码示例
2022-06-28 11:08:31
python交换两个变量的值方法
2022-07-28 10:10:48
Vue从TodoList中学父子组件通信
2024-05-29 22:22:20
Shellcode加密解密函数
2009-04-24 11:18:00
python中remove函数的踩坑记录
2022-10-25 18:32:50
简单仿LightBox效果
2008-09-19 21:35:00
Mysql排序和分页(order by&limit)及存在的坑
2024-01-20 04:55:28
python实现将json多行数据传入到mysql中使用
2022-12-28 06:41:51