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强大的日期函数代码分享
Sep 04 Javascript
Backbone.js框架中简单的View视图编写学习笔记
Feb 14 Javascript
javascript HTML5 canvas实现打砖块游戏
Jun 18 Javascript
关于JS与jQuery中的文档加载问题
Aug 22 jQuery
React通过父组件传递类名给子组件的实现方法
Nov 13 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
Aug 20 Javascript
ES6知识点整理之数组解构和字符串解构的应用示例
Apr 17 Javascript
React精髓!一篇全概括小结(急速)
May 23 Javascript
JS实现时间校验的代码
May 25 Javascript
vue-cli单页面预渲染seo-prerender-spa-plugin操作
Aug 10 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
JavaScript实现消消乐的源代码
Jan 12 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 将excel导入mysql
2009/11/09 PHP
PHP输出数组中重名的元素的几种处理方法
2012/09/05 PHP
php使用反射插入对象示例分享
2014/03/11 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP实时统计中文字数和区别
2019/02/28 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
jQuery实现的个性化返回底部与返回顶部特效代码
2015/10/30 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
JS中的作用域链
2017/03/01 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
全面理解Python中self的用法
2016/06/04 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
python中p-value的实现方式
2019/12/16 Python
Django实现从数据库中获取到的数据转换为dict
2020/03/27 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
Python extract及contains方法代码实例
2020/09/11 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
中东奢侈品购物网站:Ounass
2020/09/02 全球购物
外贸英语毕业生自荐信
2013/11/14 职场文书
个人自荐信
2013/12/05 职场文书
出生公证委托书
2014/04/03 职场文书
师德师风演讲稿
2014/05/05 职场文书
同学聚会策划方案
2014/06/06 职场文书
巾帼志愿者活动方案
2014/08/17 职场文书
新人入职感言
2015/07/31 职场文书
正确使用MySQL INSERT INTO语句
2021/05/26 MySQL
深入理解以DEBUG方式线程的底层运行原理
2021/06/21 Java/Android