vue移动端的左右滑动事件详解


Posted in Javascript onJune 17, 2020

本文实例为大家分享了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实战教程》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript跨域刷新实现代码
Jan 01 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
Mar 03 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
May 23 Javascript
3种不同方式的焦点图轮播特效分享
Oct 30 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
Oct 30 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
Aug 11 Javascript
JQuery控制图片由中心点逐渐放大效果
Jun 26 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
微信小程序点击控件修改样式实例详解
Jul 07 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
微信小程序实现时间预约功能
Nov 27 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
Jun 17 #Javascript
vue-iview动态新增和删除的方法
Jun 17 #Javascript
vue iview实现动态新增和删除
Jun 17 #Javascript
vue如何搭建多页面多系统应用
Jun 17 #Javascript
vue2.0实现列表数据增加和删除
Jun 17 #Javascript
使用next.js开发网址缩短服务的方法
Jun 17 #Javascript
vue实现前端分页完整代码
Jun 17 #Javascript
You might like
下载文件的点击数回填
2006/10/09 PHP
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
2007/12/23 Javascript
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
NodeJS使用jQuery选择器操作DOM
2015/02/13 NodeJs
js实现跨域访问的三种方法
2015/12/09 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
微信小程序 跳转方式总结
2017/04/20 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
微信小程序多列选择器range-key使用详解
2020/03/30 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
React中的render何时执行过程
2018/04/13 Javascript
jquery获取select选中值的文本,并赋值给另一个输入框的方法
2018/08/21 jQuery
vue form 表单提交后刷新页面的方法
2018/09/04 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
详解json串反转义(消除反斜杠)
2019/08/12 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
python删除列表内容
2015/08/04 Python
关于python的bottle框架跨域请求报错问题的处理方法
2017/03/19 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
PyQt5实现下载进度条效果
2018/04/19 Python
tensorboard显示空白的解决
2020/02/15 Python
PyTorch-GPU加速实例
2020/06/23 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
python破解同事的压缩包密码
2020/10/14 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
投标单位介绍信
2014/01/09 职场文书
班级联欢会主持词
2015/07/03 职场文书
单位车辆管理制度
2015/08/05 职场文书
Python多个MP4合成视频的实现方法
2021/07/16 Python
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js