vue的touchStart事件及click事件冲突问题

vue的touchStart事件及click事件冲突问题一问题:今天遇到这样问题,给某个元素同事绑定touchStart及click事件后,若在移动设备上,当你点击时,会依次出发这两个事件。因为移动端的click事件触发是会延迟300ms,所以touchStart事件会先触发后再触发click事件。这样导致每次都要执行两次…

大家好,又见面了,我是你们的朋友全栈君。

一 、问题:

今天遇到这样问题,给某个元素同时绑定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()前打印结果
在这里插入图片描述
添加 e.preventDefault()后打印结果
在这里插入图片描述

(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)
      }
    }
  }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150801.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 词性标注

    词性标注

    2021年9月1日
    137
  • navicat 激活码【2021免费激活】

    (navicat 激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS32PGH0SQB-eyJsa…

    2022年3月26日
    94
  • PyCharm创建一个新的项目

    PyCharm创建一个新的项目欢迎使用PyCharm这是第一次使用PyCharm,如果你想学习如何使用PyCharm创建一个新的项目,可以仔细阅读这篇文章,了解一下。打开PyCharm点击创建一个新项目选择保存的目录(建议D盘),刚刚安装的默认选择新建环境,点击创建下载配置解释器Python3.8进行中开始创建以“.py”为后缀写个简单的helloworld!运行一下结果如下可以用一个子目录打包需要写的东西同样的操作这次写个learnPython,看看效果,前后对比还有文件存储

    2022年8月29日
    4
  • Spring DI模式 小样例

    Spring DI模式 小样例

    2022年2月2日
    43
  • 罗技键盘手机app_罗技k480键盘教程

    罗技键盘手机app_罗技k480键盘教程1罗技Android平板键盘:概况前言:相信有很多平板用户都羡慕华硕推出的一款带外接键盘功能的平板吧,现在不用垂涎欲滴了,因为罗技已经看到平板电脑用户群中对外接键盘输入的需求,推出了罗技平板电脑键盘,下面就和我们一起关注一下吧。罗技平板电脑键盘(支持Android)概况介绍:打开罗技平板电脑键盘的包装,我们发现只有一个黑盒子,其实这个扁平的黑盒子是用于架设放置平板电脑的。打开黑盒子,里面蓝色的内饰…

    2022年10月15日
    3
  • OpenProcessToken令牌函数使用方法

    OpenProcessToken令牌函数使用方法转载自:https://www.cnblogs.com/mengfanrong/p/5185850.html GetCurrentProcessID得到当前进程的IDOpenProcessToken得到进程的令牌句柄LookupPrivilegeValue查询进程的权限AdjustTokenPrivileges调整令牌权限要对一个随意进程(包括系统安全进程和服务进程)进行指定…

    2022年6月25日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号