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 相关文章推荐
js不是基础的基础
Dec 24 Javascript
XML+XSL 与 HTML 两种方案的结合
Apr 22 Javascript
Javascript valueOf 使用方法
Dec 28 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
javascript搜索框效果实现方法
May 14 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
Oct 23 Javascript
Vue.js绑定HTML class数组语法错误的原因分析
Oct 19 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
Sep 17 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
对Vue table 动态表格td可编辑的方法详解
Aug 28 Javascript
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
Jun 07 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 源代码压缩小工具
2009/12/22 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
php实现的验证码文件类实例
2015/06/18 PHP
PHP7新功能总结
2019/04/14 PHP
如何在Web页面上直接打开、编辑、创建Office文档
2007/03/12 Javascript
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
JavaScript 异步调用
2017/10/25 Javascript
vue实现动态显示与隐藏底部导航的方法分析
2019/02/11 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
JS原型对象操作实例分析
2020/06/06 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
python用Pygal如何生成漂亮的SVG图像详解
2017/02/10 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
python去除文件中重复的行实例
2018/06/29 Python
python读取Excel表格文件的方法
2019/09/02 Python
pygame库实现移动底座弹球小游戏
2020/04/14 Python
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
物流仓储实习自我鉴定
2013/09/25 职场文书
毕业生教师求职信
2013/10/20 职场文书
室内设计专业自荐信
2014/05/31 职场文书
法定代表人授权委托书
2014/09/19 职场文书
2014年大班保育员工作总结
2014/12/02 职场文书
谢师宴邀请函
2015/02/02 职场文书
职位证明模板
2015/06/23 职场文书
重阳节简报
2015/07/20 职场文书
python中的plt.cm.Paired用法说明
2021/05/31 Python
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android