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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言 sprintf函数使用详解

    C语言 sprintf函数使用详解srpintf()函数的功能非常强大:效率比一些字符串操作函数要高;而且更具灵活性;可以将想要的结果输出到指定的字符串中,也可作为缓冲区,而printf只能输出到命令行上~头文件:stdio.h函数功能:格式化字符串,将格式化的数据写入字符串中。函数原型:intsprintf(char*buffer,constchar*format,[argument]…)参数:…

    2022年6月22日
    47
  • pycharm的介绍_为什么不建议学python

    pycharm的介绍_为什么不建议学pythonpycharm使用集成开发环境(IDE,IntegratedDevelopmentEnvironment)VIM#经典的linux下的文本编辑器Emacs#linux文本编辑器,比vim更容易使用Eclipse#JavaIDE,支持python,c,c++VisualStudio#微软开发的IDE,python,c++,ja…

    2022年8月28日
    4
  • 从数据库中读取,实现省市区联动

    从数据库中读取,实现省市区联动

    2021年8月21日
    60
  • spi总线协议及spi时序图详解_奔创spi

    spi总线协议及spi时序图详解_奔创spi大家好,我是无际。上个章节我们讲解了spi接口定义,今天我们更加深入讲解下spi协议时序图和spi四种模式的用法。刚开始接触单片机开发时,最怕就是看时序图,对于我来说就是奇怪的知识。特别是SPI和IIC的,以前写程序都直接复制别人程序,功能实现就行了也没去研究过数据传输的时候时序具体是怎么样的。那个时候经验也不足,网上搜的资料说的都太学术化了,也看不懂。后面项目做多了,发现最常用到的通信总线无非就是SPI、IIC、USART、CAN、单口通信。理解也慢慢深刻了,现在去分析时序图也更加

    2022年10月9日
    4
  • EagleEye_eyekey

    EagleEye_eyekey摘要:EagleEye作为阿里集团老牌的链路跟踪系统,其自身业务虽不在交易链路上,但却监控着全集团的链路状态,特别是在中间件的远程调用上,覆盖了集团绝大部分的场景,在问题排查和定位上发挥着巨大的作用,保障了各个系统的稳定性,为整个技术团队打赢这场战役保驾护航。作者:王华锋(水彧)背景 双十一一直是阿里巴巴集团每年要打的一场大战役。要打赢这场战役,技术上,不仅仅是几个应用、几个

    2022年4月19日
    65
  • 概率论中PDF、PMF和CDF的区别与联系

    概率论中PDF、PMF和CDF的区别与联系在概率论中,经常出现PDF、PMF和CDF,那么这三者有什么区别与联系呢?1.概念解释PDF:概率密度函数(probabilitydensityfunction),在数学中,连续型随机变量的概率密度函数(在不至于混淆时可以简称为密度函数)是一个描述这个随机变量的输出值,在某个确定的取值点附近的可能性的函数。PMF:概率质量函数(probabilitymassfunct…

    2022年5月24日
    59

发表回复

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

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