解决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 相关文章推荐
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
小结Node.js中非阻塞IO和事件循环
Sep 18 Javascript
JavaScript实现带标题的图片轮播特效
May 20 Javascript
JavaScript的Number对象的toString()方法
Dec 18 Javascript
JavaScript function函数种类详解
Feb 22 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
Nov 07 Javascript
基于javascript实现按圆形排列DIV元素(二)
Dec 02 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
vue-router路由懒加载和权限控制详解
Dec 13 Javascript
JavaScript如何实现元素全排列实例代码
May 14 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
Oct 29 Javascript
JS实现随机抽取三人
Nov 06 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的一些小问题
2010/07/03 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php中try catch捕获异常实例详解
2014/11/21 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
基于jquery的禁用右键、文本选择功能、复制按键的实现代码
2013/08/27 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
js单词形式的运算符
2014/05/06 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
[01:32]2016国际邀请赛中国区预选赛CDEC战队教练采访
2016/06/26 DOTA
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
让 python 命令行也可以自动补全
2014/11/30 Python
浅谈Pandas 排序之后索引的问题
2018/06/07 Python
查看python下OpenCV版本的方法
2018/08/03 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
Python将字典转换为XML的方法
2020/08/01 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
寒假思想汇报
2014/01/10 职场文书
汽车机电维修工求职信
2014/09/30 职场文书
公安机关正风肃纪剖析材料
2014/10/10 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
2014年学校教学工作总结
2014/12/06 职场文书
学生评语集锦
2015/01/04 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python
Apache自带的ab压力测试工具的实现
2022/07/23 Servers