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小tip资料
Nov 23 Javascript
JS集成fckeditor及判断内容是否为空的方法
May 27 Javascript
JavaScript跨域调用基于JSON的RESTful API
Jul 09 Javascript
将form表单通过ajax实现无刷新提交的简单实例
Oct 12 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
Oct 14 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 Javascript
JS原生数据双向绑定实现代码
Aug 14 Javascript
vuejs实现本地数据的筛选分页功能思路详解
Nov 15 Javascript
详解如何在react中搭建d3力导向图
Jan 12 Javascript
重新认识vue之事件阻止冒泡的实现
Aug 02 Javascript
vue项目开发中setTimeout等定时器的管理问题
Sep 13 Javascript
vue子路由跳转实现tab选项卡
Jul 24 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
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
Laravel-admin之修改操作日志的方法
2019/09/30 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
jquery 删除节点 添加节点 找兄弟节点的简单实现
2016/12/07 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
JS在if中的强制类型转换方式
2018/07/15 Javascript
JS实现移动端触屏拖拽功能
2018/07/31 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
jQuery实现视频展示效果
2020/05/30 jQuery
使用wxpython实现的一个简单图片浏览器实例
2014/07/10 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
Python 基础教程之包和类的用法
2017/02/23 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
Python实现一个简单的验证码程序
2017/11/03 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
Python匿名函数/排序函数/过滤函数/映射函数/递归/二分法
2019/06/05 Python
python函数局部变量、全局变量、递归知识点总结
2019/11/15 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
python PIL模块的基本使用
2020/09/29 Python
Python 中Operator模块的使用
2021/01/30 Python
介绍CSS3使用技巧5个
2009/04/02 HTML / CSS
HTML5 表单验证失败的提示语问题
2017/07/13 HTML / CSS
用缩写的指针比较"if(p)" 检查空指针是否可靠?如果空指针的内部表达不是0会怎么样?
2014/01/05 面试题
营业员个人总结的自我评价
2013/10/25 职场文书
初三化学教学反思
2014/01/23 职场文书
个人贷款担保书
2014/04/01 职场文书
世博会口号
2014/06/20 职场文书
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
2021/09/04 SQL Server