解决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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
JS实现的省份级联实例代码
Jun 24 Javascript
基于javascript实现全屏漂浮广告
Mar 31 Javascript
浅析BootStrap模态框的使用(经典)
Apr 29 Javascript
Vue.js实战之利用vue-router实现跳转页面
Apr 01 Javascript
jQuery制作全屏宽度固定高度轮播图(实例讲解)
Jul 08 jQuery
vue 虚拟dom的patch源码分析
Mar 01 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
Oct 14 Javascript
js实现图片实时时钟
Jan 15 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
Oct 30 Javascript
详解JavaScript之Array.reduce源码解读
Nov 01 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 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
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
extjs 3.31 TreeGrid实现静态页面加载json到TreeGrid里面
2013/04/02 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
JavaScript设计模式之装饰者模式介绍
2014/12/28 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
Angular开发者指南之入门介绍
2017/03/05 Javascript
JQuery实现图片轮播效果
2017/05/08 jQuery
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
JS中实现浅拷贝和深拷贝的代码详解
2019/06/05 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
Python全局变量操作详解
2015/04/14 Python
举例讲解Python设计模式编程中对抽象工厂模式的运用
2016/03/02 Python
python批量制作雷达图的实现方法
2016/07/26 Python
深入理解Python中的*重复运算符
2017/10/28 Python
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
Python小进度条显示代码
2019/03/05 Python
django-crontab实现服务端的定时任务的示例代码
2020/02/17 Python
pandas分批读取大数据集教程
2020/06/06 Python
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
个人应聘自我评价分享
2013/11/18 职场文书
早餐连锁店计划书
2014/01/08 职场文书
重阳节标语大全
2014/10/07 职场文书
2014预防青少年违法犯罪工作总结
2014/12/10 职场文书
介绍信模板
2015/01/31 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis