解决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 相关文章推荐
为JavaScript类型增加方法的实现代码(增加功能)
Dec 29 Javascript
jquery 字符串切割函数substring的用法说明
Feb 11 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
Feb 10 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
May 13 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
Dec 23 Javascript
javascript 中null和undefined区分和比较
Apr 19 Javascript
vue项目使用axios发送请求让ajax请求头部携带cookie的方法
Sep 26 Javascript
原来JS还可以这样拆箱转换详解
Feb 01 Javascript
详解Vue组件之间通信的七种方式
Apr 14 Javascript
Vue动态面包屑功能的实现方法
Jul 01 Javascript
vue ssr服务端渲染(小白解惑)
Nov 10 Javascript
微信小程序单选框自定义赋值
May 26 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文件操作代码(一)
2009/03/20 PHP
php导入模块文件分享
2015/03/17 PHP
PHP中的事务使用实例
2015/05/26 PHP
php连接oracle数据库的方法(测试成功)
2016/05/26 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
php-fpm重启导致的程序执行中断问题详解
2019/04/29 PHP
php使用redis的几种常见操作方式和用法示例
2020/02/20 PHP
goto语法在PHP中的使用教程
2020/09/17 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
javascript 特殊字符串
2009/02/25 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
2009/11/24 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
使用HTML+CSS+JS制作简单的网页菜单界面
2015/07/27 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
javascript对浅拷贝和深拷贝的详解
2016/10/14 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
微信小程序实现侧边栏分类
2019/10/21 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
[03:16]DOTA2完美大师赛主赛事首日集锦
2017/11/23 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
Python项目跨域问题解决方案
2020/06/22 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
小学生九一八纪念日83周年演讲稿500字
2014/09/17 职场文书
社区活动总结
2015/02/04 职场文书
Python学习开发之图形用户界面详解
2021/08/23 Python
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis