解决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 相关文章推荐
IE FF OPERA都可用的弹出层实现代码
Sep 29 Javascript
js触发select onchange事件的小技巧
Aug 05 Javascript
jquery衣服颜色选取插件效果代码分享
Aug 28 Javascript
Google 地图获取API Key详细教程
Aug 06 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
Oct 14 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
Aug 16 Javascript
vue获取dom元素注意事项
Dec 28 Javascript
微信小程序 授权登录详解(附完整源码)
Aug 23 Javascript
Vue 自定义指令实现一键 Copy功能
Sep 16 Javascript
vue实现配置全局访问路径头(axios)
Nov 01 Javascript
微信小程序scroll-view的滚动条设置实现
Mar 02 Javascript
微信小程序实现锚点跳转
Nov 23 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 sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP Class&amp;Object -- 解析PHP实现二叉树
2013/06/25 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
使用原生JS实现弹出层特效
2014/12/22 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
json的结构与遍历方法实例分析
2017/04/25 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
python算法学习之基数排序实例
2013/12/18 Python
python字符串连接方式汇总
2014/08/21 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python的MongoDB模块PyMongo操作方法集锦
2016/01/05 Python
实例讲解Python中global语句下全局变量的值的修改
2016/06/16 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
python时间日期操作方法实例小结
2020/02/06 Python
利用python控制Autocad:pyautocad方式
2020/06/01 Python
Python调用OpenCV实现图像平滑代码实例
2020/06/19 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
交通安全教育制度
2014/02/02 职场文书
表扬稿格式范文
2015/01/16 职场文书
转让协议书
2015/01/27 职场文书
2015年计生协会工作总结
2015/04/24 职场文书
Python OpenCV形态学运算示例详解
2022/04/07 Python