博客
关于我
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/

你可能感兴趣的文章
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
npm编译报错You may need an additional loader to handle the result of these loaders
查看>>
npm设置淘宝镜像、升级等
查看>>
npm配置安装最新淘宝镜像,旧镜像会errror
查看>>
npm错误 gyp错误 vs版本不对 msvs_version不兼容
查看>>
npm错误Error: Cannot find module ‘postcss-loader‘
查看>>
npm,yarn,cnpm 的区别
查看>>
NPOI之Excel——合并单元格、设置样式、输入公式
查看>>
NPOI利用多任务模式分批写入多个Excel
查看>>
NPOI在Excel中插入图片
查看>>
NPOI将某个程序段耗时插入Excel
查看>>
NPOI格式设置
查看>>
Npp删除选中行的Macro录制方式
查看>>
NR,NF,FNR
查看>>
nrf开发笔记一开发软件
查看>>
nrm —— 快速切换 NPM 源 (附带测速功能)
查看>>
nrm报错 [ERR_INVALID_ARG_TYPE]
查看>>
NS3 IP首部校验和
查看>>
NSDateFormatter的替代方法
查看>>
NSError 的使用方法
查看>>