vue中touch和click共存的解决方式


Posted in Javascript onJuly 28, 2020

在vue开发手机端项目时,我们经常会遇到touch和click共存的情况,比如城市选择页面的字母滑动

vue中touch和click共存的解决方式

touch事件在手机端会触发浏览器滑动,所以应给touch事件添加阻止默认行为touchmove.prevent。注意阻止默认行为事件不要添加在touchstart事件上,会影响到click事件的发生。

touch事件和click事件发生先后顺序:

touchstart,touchmove,touchend,click

补充知识:touchstart与click同时触发

产生冲突的原因

我们可以给某个元素同时绑定 touchstart 和 click 事件,但这将会导致本篇文章解决的问题 ? 这两个事件在移动设备上会发生冲突。

由于移动设备能够同时识别 touchstart 和 click 事件,因此当用户点击目标元素时,绑定在目标元素上的 touchstart 事件与 click 事件(约300ms后)会依次被触发,也就是说,我们所绑定的回调函数会被执行两次!。这显然不是我们想要的结果。

解决方案

(1)原生JS

方法一:

使用事件对象中的 preventDefault 方法,preventDefault 方法的作用在于:阻止元素默认事件行为的发生,但有意思的是,当我们在目标元素同时绑定 touchstart 和 click 事件时,在 touchstart 事件回调函数中使用该方法,可以阻止后续 click 事件的发生。

const Button = document.getElementById("targetButton")
Button.addEventListener("touchstart", e => {
 e.preventDefault()
 console.log("touchstart event!")
})
 
Button.addEventListener("click", e => {
 e.preventDefault()
 console.log("click event!")
})

方法二:

基于功能检测绑定事件

我们可以通过判断浏览器是否支持 touchstart 事件来封装元素的点击事件,这样客户端会根据当前环境判定元素应该绑定的事件类型,代码如下:

const Button = document.getElementById("targetButton")
const clickEvent = (function() {
 if ('ontouchstart' in document.documentElement === true)
 return 'touchstart';
 else
 return 'click';
})();
 
Button.addEventListener(clickEvent, e => {
 console.log("things happened!")
})

(2) VUE解决方案:

HTML

<div class="comment-text" 
   @touchstart.prevent="gtouchstart(XXX)"
   @touchend.prevent="triggerReply(XXXX)">
   {{ item.content}}
 </div>

JS

data: function () {
  return {
     Loop: 0
   };
 }
gtouchstart: function (XXXX) {
    let self = this;
    //执行长按的内容
    self.Loop = setTimeout(function () {
      self.Loop = 0;
      //XXXXXXXXXXXXXXX
    }, 500);
    return false;
  },
  triggerReply: function (XXXX) {
    let self = this;
    clearTimeout(self.Loop);
    //这里click内容
    if (self.Loop !== 0) {
       //XXXXXXXXXXXXXXX
    }
    return false;
  },

添加 touchstart.prevent,组织click事件。

点击事件顺序

点击事件可以分解成多个事件

在移动端,手指点击一个元素,会经过:touchstart --> touchmove -> touchend -->click

以上这篇vue中touch和click共存的解决方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
硬盘浏览程序,保存成网页格式便可使用
Dec 03 Javascript
JavaScript 动态添加表格行 使用模板、标记
Oct 24 Javascript
iframe窗口高度自适应的实现方法
Jan 08 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
Oct 28 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
Feb 06 Javascript
AngularJS基础 ng-paste 指令简单示例
Aug 02 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
React 源码中的依赖注入方法
Nov 07 Javascript
zepto.js 实时监听输入框的方法
Dec 04 Javascript
js cavans实现静态滚动弹幕
May 21 Javascript
在Vue中使用Echarts实例图的方法实例
Oct 10 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 28 #Javascript
JavaScript中window和document用法详解
Jul 28 #Javascript
vue中echarts引入中国地图的案例
Jul 28 #Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 #Javascript
JavaScript文档加载模式以及元素获取
Jul 28 #Javascript
javascript实现贪吃蛇小游戏
Jul 28 #Javascript
Element DateTimePicker日期时间选择器的使用示例
Jul 27 #Javascript
You might like
php 获取百度的热词数据的代码
2012/02/18 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
laravel框架实现敏感词汇过滤功能示例
2020/02/15 PHP
JavaScript 原型学习总结
2010/10/29 Javascript
javascript显示用户停留时间的简单实例
2013/08/05 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
基于jQuery插件实现点击小图显示大图效果
2016/05/11 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
Element InputNumber 计数器的实现示例
2020/08/03 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
python双向链表实现实例代码
2013/11/21 Python
Python实现简单的可逆加密程序实例
2015/03/05 Python
python字典的常用操作方法小结
2016/05/16 Python
Python之Web框架Django项目搭建全过程
2017/05/02 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
Python 3.8 新功能全解
2019/07/25 Python
python异常触发及自定义异常类解析
2019/08/06 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
mac安装python3后使用pip和pip3的区别说明
2020/09/01 Python
python如何调用php文件中的函数详解
2020/12/29 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
canvas像素点操作之视频绿幕抠图
2018/09/11 HTML / CSS
文秘人员工作职责
2014/01/31 职场文书
抽样调查项目计划书
2014/04/24 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
企业活动策划方案
2014/06/02 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
安全月宣传标语
2014/10/07 职场文书
怎么用Python识别手势数字
2021/06/07 Python