解决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或asp实现的判断身份证号码是否正确两种验证方法
Nov 26 Javascript
input 输入框内的输入事件详细分析
Mar 17 Javascript
Js 回车换行处理的办法及replace方法应用
Jan 24 Javascript
JS简单实现登陆验证附效果图
Nov 19 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
jQuery实现查找最近父节点的方法
Jun 23 Javascript
纯JS实现可拖拽表单的简单实例
Sep 02 Javascript
CSS3 3D 技术手把手教你玩转
Sep 02 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
在Vue 中使用Typescript的示例代码
Sep 10 Javascript
用javascript实现倒计时效果
Feb 09 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
解决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
DIY实用性框形天线
2021/03/02 无线电
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
JS获取网页属性包括宽、高等等
2014/04/03 Javascript
jQuery实现平滑滚动页面到指定锚点链接的方法
2015/07/15 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
最全面的JS倒计时代码
2016/09/17 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
js模糊查询实例分享
2016/12/26 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
ES6学习教程之对象字面量详解
2017/10/09 Javascript
浅谈MUI框架中加载外部网页或服务器数据的方法
2018/01/31 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
微信小程序实现发送模板消息功能示例【通过openid推送消息给用户】
2019/05/05 Javascript
js实现表单项的全选、反选及删除操作示例
2020/06/05 Javascript
python去掉字符串中重复字符的方法
2014/02/27 Python
python+mysql实现简单的web程序
2014/09/11 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
基于Python实现下载网易音乐代码实例
2020/08/10 Python
python计算auc的方法
2020/09/09 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
CSS3与动画有关的属性transition、animation、transform对比(史上最全版)
2017/08/18 HTML / CSS
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
普通员工辞职信
2014/01/17 职场文书
干部鉴定材料
2014/05/18 职场文书
优质服务口号
2014/06/11 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
医学会议开幕词
2016/03/03 职场文书
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers
js不常见操作运算符总结
2021/11/20 Javascript