博客
关于我
vue的touchStart事件及click事件冲突问题
阅读量:539 次
发布时间:2019-03-08

本文共 1166 字,大约阅读时间需要 3 分钟。

遇到一个问题:在移动设备上,当你点击元素时,touchStart和click事件会依次触发。由于click事件在移动端有300ms延迟,导致touchStart先触发,随后click事件再被触发,这种情况会导致每次操作执行两次毫无意义的代码。此外,PC端无法识别touch相关事件。

为了解决这个问题,可以采取以下两种方式:

(1)使用preventDefault方法

通过在touchstart事件中添加e.preventDefault(),可以阻止click事件的触发。这种方法在Vue框架中可以通过事件修饰符@touchstart.stop.prevent实现。在method中不需要手动添加e.preventDefault(),只需在触发touchStart事件时调用阻止默认行为即可。

示例代码:

  • {{ item }}
methods: {  handleLetterClick(e) {    console.log('click事件执行一次');    this.$emit('change', e.target.innerText);  },  handleTouchStart(e) {    console.log('TouchStart执行一次');    this.touchStatus = true;    e.preventDefault(); // 在method中无需手动添加  }}

(2)判断浏览器是否支持触屏事件

可以通过检查'ontouchstart' in document来判断浏览器是否支持触屏事件。如果支持touch事件,则调用touchStart事件处理逻辑;如果不支持,直接调用click事件。

示例代码:

  • {{ item }}
methods: {  handleLetterClick(e) {    console.log('click事件执行一次');    this.$emit('change', e.target.innerText);  },  handleTouchStart(e) {    console.log('ontouchstart' in document);    if ('ontouchstart' in document) {      this.handleTouchStart(e);    } else {      this.handleLetterClick(e);    }  },  handleSelfClick(e) {    // 可以根据需要添加额外逻辑  }}

通过上述方法,可以有效避免在移动设备上触发不必要的click事件,从而优化用户体验。

转载地址:http://cgpiz.baihongyu.com/

你可能感兴趣的文章
oracle 限制用户并行,insert /*parallel */ 到不同用户,并行起不来的问题
查看>>
oracle--用户,权限,角色的管理
查看>>
Oracle-定时任务-JOB
查看>>
oracle.dataaccess 连接池,asp.net使用Oracle.DataAccess.dll连接Oracle
查看>>
oracle00205报错,Oracle控制文件损坏报错场景
查看>>
Oracle10g EM乱码之快速解决
查看>>
Oracle10g下载地址--多平台下的32位和64位
查看>>
Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
查看>>
oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
查看>>
Oracle11G基本操作
查看>>
Oracle11g服务详细介绍及哪些服务是必须开启的?
查看>>
Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
查看>>
oracle12安装软件后安装数据库,然后需要自己配置监听
查看>>
Oracle——08PL/SQL简介,基本程序结构和语句
查看>>
Oracle——distinct的用法
查看>>
Oracle、MySQL、SQL Server架构大对比
查看>>
oracle下的OVER(PARTITION BY)函数介绍
查看>>
Oracle中DATE数据相减问题
查看>>
Oracle中merge into的使用
查看>>
oracle中sql查询上月、本月、上周、本周、昨天、今天的数据!
查看>>