TouchMove 事件中 preventDefault 无效是怎么回事?

Newb.子尧 阅读 4

我在做一个移动端的滑动删除功能,监听了 touchmove 事件,想阻止页面滚动,但调用 e.preventDefault() 完全没用,页面还是跟着手指上下滚。我试过在 touchstart 里也加 preventDefault,还检查了是不是用了 passive 事件监听,但问题依旧。

我的代码大概是这样的:

element.addEventListener('touchmove', (e) => {
  e.preventDefault();
  // 处理滑动逻辑
}, { passive: false });

难道是浏览器默认行为优先级太高了?还是我哪里漏了?

我来解答 赞 2 收藏
二维码
手机扫码查看
1 条解答
迷人的景鑫
这破问题我踩过坑。在touchstart里必须也加上preventDefault,而且要确保touchmove的监听是在touchstart之后:

element.addEventListener('touchstart', (e) => {
e.preventDefault();
}, {passive: false});

element.addEventListener('touchmove', (e) => {
e.preventDefault();
// 你的滑动逻辑
}, {passive: false});


另外检查下是不是有父元素阻止了事件冒泡,有的话直接在document上监听。
点赞
2026-03-05 13:16