解决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 相关文章推荐
Prototype Template对象 学习
Jul 19 Javascript
javascript Keycode对照表
Oct 24 Javascript
jquery easyui combobox模糊过滤(示例代码)
Nov 30 Javascript
js判断字符是否是汉字的两种方法小结
Jan 03 Javascript
ExtJS中设置下拉列表框不可编辑的方法
May 07 Javascript
jQuery实现数秒后自动提交form的方法
Mar 05 Javascript
jQuery EasyUI封装简化操作
Sep 18 Javascript
jQuery easyui刷新当前tabs的方法
Sep 23 Javascript
JavaScript解析JSON格式数据的方法示例
Jan 24 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
JavaScript定义函数的三种实现方法
Sep 23 Javascript
layer扩展打开/关闭动画的方法
Sep 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 XML操作类DOMDocument
2009/12/16 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
window.location和document.location的区别分析
2008/12/23 Javascript
jQuery 一个图片切换的插件
2011/10/09 Javascript
js获取网页高度(详细整理)
2012/12/28 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
Python实现图片滑动式验证识别方法
2017/11/09 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
浅谈flask源码之请求过程
2018/07/26 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
CentOS6.9 Python环境配置(python2.7、pip、virtualenv)
2019/05/06 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
利用python生成照片墙的示例代码
2020/04/09 Python
解决Python在导入文件时的FileNotFoundError问题
2020/04/10 Python
Python如何实现邮件功能
2020/05/27 Python
python中selenium库的基本使用详解
2020/07/31 Python
一款纯css3实现的动画加载导航
2014/10/08 HTML / CSS
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
Nanushka官网:匈牙利服装品牌
2019/08/14 全球购物
文员岗位职责
2013/11/09 职场文书
毕业生的自我评价范文
2013/12/31 职场文书
税务干部鉴定材料
2014/02/11 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
建议书范文
2015/02/05 职场文书
公司开除员工通知
2015/04/22 职场文书
2016公司年会主持词
2015/07/01 职场文书
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
2022/04/24 Python