解决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 相关文章推荐
jquery 3D球状导航的文章分类
Jul 06 Javascript
eval的两组性能测试数据
Aug 17 Javascript
用JavaScript获取DOM元素位置和尺寸大小的方法
Apr 12 Javascript
node.js下LDAP查询实例分享
Sep 30 Javascript
vue.js开发环境安装教程
Mar 17 Javascript
JS 判断某变量是否为某数组中的一个值的3种方法(总结)
Jul 10 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
浅谈Vue.js路由管理器 Vue Router
Aug 16 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
Feb 28 Javascript
关于layui导航栏不展示下拉列表的解决方法
Sep 25 Javascript
JavaScript实现捕获鼠标坐标
Apr 12 Javascript
React中Ref 的使用方法详解
Apr 28 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
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
ajax实现无刷新分页(php)
2010/07/18 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
基于jQuery的倒计时插件代码
2011/05/07 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
详解AngularJS之$window窗口对象
2018/01/17 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
layui 实现自动选择radio单选框(checked)的方法
2019/09/03 Javascript
layer 刷新某个页面的实现方法
2019/09/05 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
JavaScript禁止右击保存图片,禁止拖拽图片的实现代码
2020/04/28 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
Python多线程爬虫简单示例
2016/03/04 Python
对pandas读取中文unicode的csv和添加行标题的方法详解
2018/12/12 Python
tensorflow 重置/清除计算图的实现
2020/01/19 Python
完美解决pycharm 不显示代码提示问题
2020/06/02 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
英国领先的名牌服装折扣零售商:Brown Bag Clothing
2019/01/08 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
机械专业应届生求职信
2013/09/21 职场文书
大学生职业生涯规划书模版
2013/12/30 职场文书
班主任工作经验材料
2014/02/02 职场文书
出纳会计岗位职责
2014/03/12 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
音乐教师个人工作总结
2015/02/06 职场文书
亮剑观后感300字
2015/06/05 职场文书
2016党员党课心得体会
2016/01/07 职场文书
Python使用sql语句对mysql数据库多条件模糊查询的思路详解
2021/04/12 Python
python基础入门之字典和集合
2021/06/13 Python
关于redisson缓存序列化几枚大坑说明
2021/08/04 Redis
基于angular实现树形二级表格
2021/10/16 Javascript