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 相关文章推荐
二级域名转向类
Nov 09 Javascript
Jquery Ajax.ashx 高效分页实现代码
Oct 20 Javascript
JS去掉第一个字符和最后一个字符的实现代码
Feb 20 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
Jun 24 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
Sep 07 Javascript
Angularjs中使用layDate日期控件示例
Jan 11 Javascript
浅谈JS中的反柯里化( uncurrying)
Aug 17 Javascript
vue实现在表格里,取每行的id的方法
Mar 09 Javascript
详解js类型判断
May 22 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
Jun 20 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
Sep 14 Javascript
vue-router 控制路由权限的实现
Sep 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
构建简单的Webmail系统
2006/10/09 PHP
PHP 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php入门学习知识点六 PHP文件的读写操作代码
2011/07/14 PHP
浅谈PHP面向对象之访问者模式+组合模式
2017/05/22 PHP
关于html+ashx开发中几个问题的解决方法
2011/07/18 Javascript
Prototype源码浅析 String部分(四)之补充
2012/01/16 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
jQuery标签编辑插件Tagit使用指南
2015/04/21 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
javascript实现数组内值索引随机化及创建随机数组的方法
2015/08/10 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
JavaScript类型系统之正则表达式
2016/01/05 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
bootstrap PrintThis打印插件使用详解
2017/02/20 Javascript
vue数字类型过滤器的示例代码
2017/09/07 Javascript
Vue核心概念Action的总结
2019/01/18 Javascript
在vue项目中使用Jquery-contextmenu插件的步骤讲解
2019/01/27 jQuery
vue.js的简单自动求和计算实例
2019/11/08 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
值得收藏,Python 开发中的高级技巧
2018/11/23 Python
大学生职业生涯规划范文
2014/01/22 职场文书
思想品德自我评价
2014/02/04 职场文书
花店创业计划书范文
2014/02/07 职场文书
教育技术学专业职业规划书
2014/03/03 职场文书
应届生求职信
2014/05/31 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书