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


相关推荐

  • Js数字转字符串_java怎么将字符串转化为数字

    Js数字转字符串_java怎么将字符串转化为数字js里数字0是false但是字符串是true所以有时需要修改0+‘’数字后边加空串即可

    2025年7月25日
    3
  • Ubuntu安装GCC 3.4

    Ubuntu安装GCC 3.4Ubuntu安装GCC3.4一、背景二、安装三、总结一、背景因最近学习hit-os编译linux0.11版本内核,需要使用到gcc3.4,故此记录。二、安装#下载deb包wgethttp://old-releases.ubuntu.com/ubuntu/pool/universe/g/gcc-3.4/cpp-3.4_3.4.6-6ubuntu3_amd64.debwgethttp://old-releases.ubuntu.com/ubuntu/pool/universe/g/gc

    2022年7月24日
    10
  • qtav—-ffmeg在ubuntu和win10上的编译和运行

    qtav—-ffmeg在ubuntu和win10上的编译和运行最近在windows上和ubuntu上都安装了qtav并且通过了编译测试,实测播放中英文的视频文件功能正常,有图像有声音。大致情况是,操作系统ubuntu:wkr@sea-X550JK:~$cat/etc/os-releaseNAME=”Ubuntu”VERSION=”16.04.4LTS(XenialXerus)”ID=ubuntuID_LIKE=debianPRETTY_…

    2025年12月2日
    4
  • 摩斯密码转换器_摩斯密码怎么表示中文

    摩斯密码转换器_摩斯密码怎么表示中文在线DEMO:https://oktools.net/morse摩斯电码和Unicode映射conststandard={'A':'01','B

    2022年8月3日
    5
  • STUN 原理理解「建议收藏」

    STUN 原理理解「建议收藏」STUN原理理解STUN简介SimpleTraversalofUDPoverNATs,NAT的UDP的简单穿越,是一种网络协议。是客户机-服务器的一种协议,由RFC3489定义。该协议定义了一些消息格式,大体上分为Request/Response。这个协议主要作用就是可以用来在两个处于NAT路由器之后的主机之间建立UDP通信。它允许位于NAT后的客户端找出自己的公网地址,确定自己…

    2022年7月16日
    21
  • 在线考试系统测试方案_在线考试系统开发

    在线考试系统测试方案_在线考试系统开发在线考试系统软件测试用例报告测试用例报告目录1、概述12、测试策略12.1功能测试11、概述本测试主要针对在线考试系统的各个模块进行功能测试和界面测试,对在线考试系统的各个模块的功能和用户交互性能进行测试。2、测试策略通过测试在线考试系统各个模块的功能实现来检测系统功能的健壮性及完整性等。界面测试:通过用户界面测试来核实用户与的交互。确保用户界面向用户提供了适当的对象功能的操作。Login000…

    2022年10月15日
    2

发表回复

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

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