移动端 touchend 事件怎么阻止冒泡才有效? 欧阳春豪 提问于 2026-03-15 18:43:17 阅读 82 移动 我在做移动端的一个滑动删除功能,父容器和子元素都绑定了 touchend 事件,点击子元素时父级也会触发,试了 stopPropagation() 却没用,是不是写法有问题? element.addEventListener('touchend', function(e) { e.stopPropagation(); // 其他逻辑 }); 触摸事件阻止冒泡 我来解答 赞 12 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 极客润兴 Lv1 你的写法其实没问题,stopPropagation() 在 touchend 上是有效的。问题可能出在其他地方。 常见原因是移动端有个坑:touchend 之后浏览器还会自动触发一个 click 事件,所以你阻止了 touchend 的冒泡,但 click 事件还是会上来。 解决办法是同时阻止默认行为: element.addEventListener('touchend', function(e) { e.stopPropagation(); e.preventDefault(); // 其他逻辑 }, false); 注意 preventDefault() 要加上,而且建议把第三个参数写成 false(冒泡阶段),这样更符合直觉。 如果还是不行,检查一下你的父容器事件绑定是不是用在了合适的位置,有时候事件绑定在 document 或者 body 上会有些奇怪的行为。 还有一种情况是某些国产浏览器的兼容问题,如果上面方法都不行,可以试试在 touchstart 阶段就阻止: element.addEventListener('touchstart', function(e) { e.stopPropagation(); }, { passive: false }); 加上 { passive: false } 是为了能调用 preventDefault,这个参数移动端开发时经常用到。 回复 点赞 2026-03-16 23:23 加载更多 相关推荐 1 回答 64 浏览 移动端 touchend 事件怎么阻止冒泡? 我在做一个滑动删除功能,给列表项绑定了 touchend 事件,但点击后事件总是冒泡到父容器,导致触发了父级的点击逻辑。 试过在回调里加 e.stopPropagation(),但好像没用,是不是移动... Newb.综敏 移动 2026-03-25 01:10:19 2 回答 248 浏览 React中touchend事件在移动端为什么没触发? 我在用React写移动端滑动删除功能时遇到问题,给元素绑定了touchstart和touchend事件,但结束触摸时事件没反应。手指离开屏幕后控制台只打印了touchstart,touchend完全没... 极客尚文 移动 2026-02-05 00:48:25 1 回答 100 浏览 为什么移动端TouchEnd事件在快速滑动后不触发? 在移动端做卡片滑动交互时,发现当快速滑动手指离开屏幕后,TouchEnd事件偶尔不触发,导致卡片位置没及时更新。代码已经绑定了TouchEvent,但测试时发现: 尝试给卡片加了CSS过渡效果后问题更... 宇文晨晰 交互 2026-01-31 08:54:29 2 回答 64 浏览 touchend 事件在移动端不触发是怎么回事? 我在做一个滑动切换图片的功能,监听了 touchstart 和 touchmove,但 touchend 好像经常没反应,尤其是在快速滑动后松手的时候。 我试过给元素加了 touch-action: ... UI恒宇 移动 2026-03-20 23:11:22 2 回答 132 浏览 Vue里怎么实现长按事件?touchstart和touchend老是不生效 我在移动端做了一个长按删除的功能,但用 touchstart 和 touchend 总是没反应,是不是我写法有问题? 试过加 passive: false 也没用,而且在真机上测试有时候会触发 cli... 百里乙豪 交互 2026-03-19 00:51:23 2 回答 56 浏览 为什么TouchEnd事件在快速滑动后会重复触发? 我在做移动端滑动删除功能时,给元素绑定了touchstart和touchend事件。但发现当手指快速滑动后突然抬起,touchend会触发两次,导致删除逻辑执行两次。代码逻辑看起来没问题,但测试多次还... 程序员奕森 交互 2026-02-18 23:57:23 1 回答 37 浏览 移动端点击事件冒泡怎么阻止? 我在用 Vue 做一个弹窗,里面有个按钮要阻止点击事件冒泡到外层遮罩,但用了 @click.stop 好像没生效? 在真机上点按钮还是会触发外层的关闭逻辑,是不是移动端 touch 事件和 click... 凌萓 移动 2026-03-25 08:47:20 2 回答 48 浏览 touchend 事件在滚动时为什么会误触发? 我在做一个移动端的滑动删除功能,绑定了 touchstart 和 touchend 来判断用户是否轻扫。但发现只要手指在列表上滚动一下,即使没抬起,也会触发 touchend,导致误删。这是为啥? 我... 司空雪琪 移动 2026-02-24 15:42:21 2 回答 180 浏览 移动端触摸事件有300ms延迟怎么解决? 我正在给移动端网页加点击反馈,发现用ontouchend事件触发按钮高亮时,总要等半秒才生效。试过设置-webkit-tap-highlight-color透明也没用,代码如下: element.on... 瑞红 ☘︎ 移动 2026-02-02 13:36:32 2 回答 125 浏览 React中touchend事件为什么在快速滑动后无法触发? 我在用React做手势滑动时发现,当快速滑动手指离开屏幕后,touchend事件偶尔不触发,这是为什么? 代码是这样的: function Slider() { const handleTouchSt... 端木正宇 移动 2026-02-01 12:34:25
常见原因是移动端有个坑:touchend 之后浏览器还会自动触发一个 click 事件,所以你阻止了 touchend 的冒泡,但 click 事件还是会上来。
解决办法是同时阻止默认行为:
注意 preventDefault() 要加上,而且建议把第三个参数写成 false(冒泡阶段),这样更符合直觉。
如果还是不行,检查一下你的父容器事件绑定是不是用在了合适的位置,有时候事件绑定在 document 或者 body 上会有些奇怪的行为。
还有一种情况是某些国产浏览器的兼容问题,如果上面方法都不行,可以试试在 touchstart 阶段就阻止:
加上
{ passive: false }是为了能调用 preventDefault,这个参数移动端开发时经常用到。