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 Array Flatten 与递归使用介绍
Oct 30 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
点击按钮或链接不跳转只刷新页面的脚本整理
Oct 22 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
Nov 13 Javascript
node.js中的buffer.toString方法使用说明
Dec 14 Javascript
AngularJS模块学习之Anchor Scroll
Jan 19 Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 Javascript
使用bootstrap typeahead插件实现输入框自动补全之问题及解决办法
Jul 07 Javascript
jQuery将表单序列化成一个Object对象的实例
Nov 29 Javascript
js鼠标移动时禁止选中文字
Feb 19 Javascript
原生js简单实现放大镜特效
May 16 Javascript
js合并两个数组生成合并后的key:value数组
May 09 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
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
PHP+Mysql+jQuery实现发布微博程序 php篇
2015/10/15 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
Yii2语言国际化的配置教程
2018/08/19 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
js post方式传递提交的实现代码
2010/05/31 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
2014/05/20 Javascript
JS获取单击按钮单元格所在行的信息
2014/06/17 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JavaScript中指定函数名称的相关方法
2015/06/04 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
谈谈JavaScript类型系统之Math
2016/01/06 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
js阻止冒泡和默认事件(默认行为)详解
2016/10/20 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
vue中使用codemirror的实例详解
2018/11/01 Javascript
vue项目中mock.js的使用及基本用法
2019/05/22 Javascript
vue实现在v-html的html字符串中绑定事件
2019/10/28 Javascript
Sublime Text3 配置 NodeJs 环境的方法
2020/05/20 NodeJs
vue中移动端调取本地的复制的文本方式
2020/07/18 Javascript
解决vue+elementui项目打包后样式变化问题
2020/08/03 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
python异步实现定时任务和周期任务的方法
2019/06/29 Python
numpy 矩阵形状调整:拉伸、变成一位数组的实例
2020/06/18 Python
副总经理岗位职责范本
2014/09/30 职场文书
医德医风个人总结
2015/02/28 职场文书
2015年社区居委会工作总结
2015/05/18 职场文书
交通安全温馨提示语
2015/07/14 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
《活见鬼》教学反思
2016/02/24 职场文书