移动端触发touchstart事件后同时阻止click事件触发

本文深入探讨了移动端事件流机制,特别是在触摸事件与点击事件的关系上。通过实例演示了touchstart、touchmove、touchend和click事件的触发顺序,并介绍了如何使用preventDefault()方法阻止click事件的触发。

在移动端,手指点击一个元素,会经过:touchstart --> touchmove -> touchend --》click。

事件流本身会持续进行下去的。

做了几个demo验证了一下,上面的理论。

首先给一个元素同时绑定touchstart和click事件,看谁先触发。

html:

var content = document.querySelector(".content"); content.addEventListener(“touchend”, function(){ content.style.background = “#0F0”; });content.addEventListener(“click”, function(){ content.style.background = “#00F”; });

上面逻辑是给content类名的div,绑定一个touch事件和一个click事件。分别让div的背景色变成绿色和蓝色。

手机测试一下,点击一下,div是先变成绿色然后又变成蓝色。

那能不能只触发touch事件,不去触发click事件呢?查阅相关资料,发现了preventDefault()的方法,阻止事件的默认行为。

var content = document.querySelector(".content"); content.addEventListener(“touchstart”, function(e){ e.preventDefault(); content.style.background = “#0F0”; }) content.addEventListener(“click”, function(e){ content.style.background = “#00F”; });

通过preventDefault()方法,可以阻止后面事件的触发。

在 Vue 2 中,如果需要在移动端阻止点击事件从子元素冒泡到父元素,可以通过 Vue 提供的事件修饰符 `.stop` 来实现。这个修饰符可以直接应用在子元素的 `@click` 事件上,从而阻止事件传播到父级元素[^2]。 例如,以下代码展示了如何在 Vue 2 中使用 `.stop` 修饰符来阻止点击事件冒泡: ```html <template> <div @click="handleParentClick"> <button @click.stop="handleChildClick">点击我</button> </div> </template> <script> export default { methods: { handleParentClick() { console.log('父元素的点击事件触发'); }, handleChildClick() { console.log('子元素的点击事件触发'); } } }; </script> ``` 在这个示例中,当点击按钮时,只会触发 `handleChildClick` 方法,而不会触发父元素的 `handleParentClick` 方法,因为 `.stop` 修饰符已经阻止事件冒泡[^2]。 如果需要更复杂的事件控制,例如在某些条件下动态决定是否阻止冒泡,可以在事件处理函数中手动调用 `event.stopPropagation()` 方法[^1]。这种方式提供了更大的灵活性,但同时也需要更仔细地管理事件逻辑。 此外,在移动端开发中,除了点击事件之外,可能还需要处理其他类型的事件(如 `touchstart` 或 `touchend`)。Vue 同样支持对这些事件使用 `.stop` 修饰符来阻止事件冒泡。例如: ```html <template> <div @touchend="handleParentTouchEnd"> <div @touchend.stop="handleChildTouchEnd">滑动我</div> </div> </template> ``` 通过这种方式,可以确保在移动端操作时,事件冒泡的行为符合预期,避免不必要的副作用[^4]。 ### 阻止点击穿透事件移动端开发中,还有一种常见的问题是点击穿透事件。这种情况通常发生在用户快速连续点击屏幕上的不同元素时,尤其是在使用 `router-link` 或类似的导航组件时可能会导致多个事件触发。解决这个问题的一种常用方法是引入 `FastClick` 库,它可以消除移动端浏览器默认的 300 毫秒点击延迟,从而避免点击穿透问题[^5]。 安装 `FastClick` 的方法如下: ```bash npm install fastclick ``` 然后在项目入口文件(如 `main.js`)中引入并初始化: ```javascript import FastClick from 'fastclick'; FastClick.attach(document.body); ``` 这样可以确保在移动端点击事件能够立即响应,并减少点击穿透的可能性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值