解决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 ondocumentready onmouseover onclick onmouseout 样式
Jul 22 Javascript
js计算字符串长度包含的中文是utf8格式
Oct 15 Javascript
javascript 3d 逐侦产品展示(核心精简)
Mar 26 Javascript
jquery 实现复选框的全选操作实例代码
Jan 24 Javascript
JS中静态页面实现微信分享功能
Feb 06 Javascript
jQuery中Datatables增加跳转到指定页功能
Feb 08 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 jQuery
浅谈Angular文字折叠展开组件的原理分析
Nov 24 Javascript
vue动态绘制四分之三圆环图效果
Sep 03 Javascript
Vue项目开发常见问题和解决方案总结
Sep 11 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 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面向对象的方法重载两种版本比较
2008/09/08 PHP
Smarty中常用变量操作符汇总
2014/10/27 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
php中文验证码实现方法
2015/06/18 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
php根据用户语言跳转相应网页
2015/11/04 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
js页面跳转常用的几种方式
2010/11/25 Javascript
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
angularjs客户端实现压缩图片文件并上传实例
2015/07/06 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
详细分析单线程JS执行问题
2017/11/22 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Linux下远程连接Jupyter+pyspark部署教程
2019/06/21 Python
django+tornado实现实时查看远程日志的方法
2019/08/12 Python
Python turtle画图库&amp;&amp;画姓名实例
2020/01/19 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
如何查找和删除数据库中的重复数据
2014/11/05 面试题
便利店投资的创业计划书
2014/01/12 职场文书
《再别康桥》教学反思
2014/02/12 职场文书
会计岗位职责范本
2014/03/07 职场文书
颁奖晚会主持词
2014/03/25 职场文书
师德师风承诺书
2014/05/23 职场文书
消防志愿者活动方案
2014/08/23 职场文书
海南召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
2016银行求职自荐信
2016/01/28 职场文书