解决vue的touchStart事件及click事件冲突问题


Posted in Javascript onJuly 21, 2020

一 、问题:

今天遇到这样问题,给某个元素同时绑定touchStart及click事件后,若在移动设备上,当你点击时,会依次出发这两个事件。因为移动端设备上的click事件触发是会延迟300ms,所以touchStart事件会先触发后再触发click事件。这样导致每次都要执行两次,这样毫无意义。这里提醒下,PC是无法识别touch相关事件

二、解决方式

(1)preventDefault方法

通过使用preventDefault方法(阻止元素默认事件行为的发生)来解决。在touchstart中添加 e.preventDefault()就可以阻止click事件触发。

模板

<ul class="list">
 <li class="item" v-for="item of letters"
 :key="item"
 :ref="item"
 @touchstart="handleTouchStart"
 @click="handleleterClick"
 >{{item}}</li>
 </ul>

上面模板可以使用vue事件修饰符@touchstart.stop.prevent实现,但method中的handleTouchStart 就无需添加 e.preventDefault();

<ul class="list">
 <li class="item" v-for="item of letters"
 :key="item"
 :ref="item"
 @touchstart.stop.prevent="handleTouchStart"
 @click="handleleterClick"
 >{{item}}</li>
 </ul>
methods: {
 handleleterClick (e) {
  console.log('click事件执行一次')
  this.$emit('change', e.target.innerText)
 },
 handleTouchStart (e) {
  console.log('TouchStart执行一次')
  e.preventDefault()//添加阻止click事件触发
  this.touchStatus = true
 }
 }
}

未添加 e.preventDefault()前打印结果

解决vue的touchStart事件及click事件冲突问题

添加 e.preventDefault()后打印结果

解决vue的touchStart事件及click事件冲突问题

(2)判断浏览器是否支持触屏事件

通过"ontouchend" in document来判断浏览器是否支持触屏事件,若支持调用touch事件,不支持调用click事件。

<ul class="list">
 <li class="item" v-for="item of letters"
 :key="item"
 :ref="item"
 @click="handleSelfClick"
 >{{item}}</li>
 </ul>
methods: {
 handleleterClick (e) {
  console.log('click事件执行一次')
  this.$emit('change', e.target.innerText)
 },
 handleTouchStart (e) {
  console.log('TouchStart执行一次')
  this.touchStatus = true
 },
 handleSelfClick (e) {
  console.log('ontouchstart' in document)//打印是否支持touch事件。
  if ('ontouchstart' in document) {
  this.handleTouchStart(e)
  } else {
  this.handleleterClick(e)
  }
 }
 }

以上这篇解决vue的touchStart事件及click事件冲突问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js function使用心得
May 10 Javascript
比较新旧两个数组值得增加和删除的JS代码
Oct 30 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
Aug 27 Javascript
Bootstrap按钮下拉菜单组件详解
May 10 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
May 18 Javascript
详解React 在服务端渲染的实现
Nov 16 Javascript
Bootstrap实现下拉菜单多级联动
Nov 23 Javascript
基于vue循环列表时点击跳转页面的方法
Aug 31 Javascript
vue组件命名和props命名代码详解
Sep 01 Javascript
在Vue中实现随hash改变响应菜单高亮
Mar 09 Javascript
js实现验证码功能
Jul 24 Javascript
解决Vue 移动端点击出现300毫秒延迟的问题
Jul 21 #Javascript
解决Vue中的生命周期beforeDestory不触发的问题
Jul 21 #Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
Jul 21 #Javascript
vue 清空input标签 中file的值操作
Jul 21 #Javascript
Vue-resource安装过程及使用方法解析
Jul 21 #Javascript
vue中destroyed方法的使用说明
Jul 21 #Javascript
解决vue组件销毁之后计时器继续执行的问题
Jul 21 #Javascript
You might like
全国FM电台频率大全 - 28 甘肃省
2020/03/11 无线电
php短网址和数字之间相互转换的方法
2015/03/13 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
JS动态创建Table,Tr,Td并赋值的具体实现
2013/07/05 Javascript
使用upstart把nodejs应用封装为系统服务实例
2014/06/01 NodeJs
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
JS基于cookie实现来宾统计记录访客信息的方法
2015/08/04 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
在JS中如何把毫秒转换成规定的日期时间格式实例
2017/05/11 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
python使用7z解压apk包的方法
2015/04/18 Python
Python实现多进程共享数据的方法分析
2017/12/04 Python
详解Python核心编程中的浅拷贝与深拷贝
2018/01/07 Python
Python简单计算文件MD5值的方法示例
2018/04/11 Python
python3.7.0的安装步骤
2018/08/27 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
使用OpenCV实现仿射变换—缩放功能
2019/08/29 Python
django 实现celery动态设置周期任务执行时间
2019/11/19 Python
python基于plotly实现画饼状图代码实例
2019/12/16 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
大学本科毕业生求职信范文
2013/12/18 职场文书
班风口号
2014/06/18 职场文书
2014领导班子四风问题对照检查材料思想汇报
2014/09/21 职场文书
导游词欢迎词
2015/02/02 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
教师节主题班会教案
2015/08/17 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
修改MySQL的数据库引擎为INNODB的方法
2021/05/26 MySQL
SQL Server中使用表变量和临时表
2022/05/20 SQL Server