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 相关文章推荐
在vs2010中调试javascript代码方法
Feb 11 Javascript
jquery中eq和get的区别与使用方法
Apr 14 Javascript
jQuery调用AJAX时Get和post公用的乱码解决方法实例说明
Jun 04 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 Javascript
jQuery中获取checkbox选中项等操作及注意事项
Nov 24 Javascript
javascript如何操作HTML下拉列表标签
Aug 20 Javascript
JS实现回到页面顶部动画效果的简单实例
May 24 Javascript
angular使用post、get向后台传参的问题实例
May 27 Javascript
Angular表格神器ui-grid应用详解
Sep 29 Javascript
详解Vue SPA项目优化小记
Jul 03 Javascript
原生JS实现列表内容自动向上滚动效果
May 22 Javascript
vuejs+element UI table表格中实现禁用部分复选框的方法
Sep 20 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
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
一个简单且很好用的php分页类
2013/10/26 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
简单js代码实现selece二级联动(推荐)
2014/02/18 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
Jquery中request和request.form和request.querystring的区别
2015/11/26 Javascript
bootstrap和jQuery.Gantt的css冲突 如何解决
2016/05/29 Javascript
jQuery学习笔记之回调函数
2016/08/15 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python连接数据库学习之DB-API详解
2017/02/07 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python利用os模块编写文件复制功能——copy()函数用法
2020/07/13 Python
英国知名的护肤彩妆与时尚配饰大型综合零售电商:Unineed
2016/11/21 全球购物
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
为什么Runtime.exec(“ls”)没有任何输出?
2014/10/03 面试题
财务人员个人求职信范文
2013/12/04 职场文书
婚前财产公证书
2014/04/10 职场文书
一年级学生评语大全
2014/04/21 职场文书
超市活动计划书
2014/04/24 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
入党积极分子学习党的纲领思想汇报
2014/09/13 职场文书
财务会计实训报告
2014/11/05 职场文书
初中数学教学反思范文
2016/02/17 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
Redis keys命令的具体使用
2022/06/05 Redis