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 相关文章推荐
在次封装easyui-Dialog插件实现代码
Nov 14 Javascript
JavaScript实现给定时间相加天数的方法
Jan 25 Javascript
AngularJS中的DOM操作用法分析
Nov 04 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
Nov 16 Javascript
10行原生JS实现文字无缝滚动(超简单)
Jan 02 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
Apr 05 Javascript
Vue 获取数组键名的方法
Jun 21 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
VuePress 静态网站生成方法步骤
Feb 14 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 Javascript
layui实现多图片上传并限制上传的图片数量
Sep 26 Javascript
浅谈JavaScript中this的指向更改
Jul 28 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
php的lavarel框架中join和orWhere的用法
2020/12/28 PHP
JavaScript访问样式表代码
2010/10/15 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
jquery解析XML及获取XML节点名称的实现代码
2016/05/18 Javascript
浅析ES6的八进制与二进制整数字面量
2016/08/30 Javascript
概述如何实现一个简单的浏览器端js模块加载器
2016/12/07 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
JS轮播图的实现方法
2020/08/24 Javascript
python网络编程学习笔记(10):webpy框架
2014/06/09 Python
python之import机制详解
2014/07/03 Python
Python模块文件结构代码详解
2018/02/03 Python
python调用Matplotlib绘制分布点并且添加标签
2018/05/31 Python
Python中list查询及所需时间计算操作示例
2018/06/21 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
python中实现控制小数点位数的方法
2019/01/24 Python
Python使用sklearn库实现的各种分类算法简单应用小结
2019/07/04 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
详解Html5微信支付爬坑之路
2018/07/24 HTML / CSS
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
美国知名的网上鞋类及相关服装零售商:Shoes.com
2017/05/06 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
员工安全生产责任书
2014/07/22 职场文书
惹女朋友生气检讨书
2015/05/06 职场文书
如何写好闭幕词
2019/04/02 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书