JavaScript实现移动端弹窗后禁止滚动

作者:纸飞机

时间:2026-10-23

浏览:496

本文介绍在移动端开发中,如何通过JavaScript阻止弹窗出现时的页面滚动。核心方案是利用addEventListener的options参数,设置passive为false并开启capture,结合overflow:hidden实现。同时深入解析passive选项对浏览器默认行为执行时机及preventDefault生效的影响,帮助开发者优化交互体验。

文章目录

移动端弹窗禁止滚动JS实现

具体实现代码如下:


computed:{
  popupStatus(){
    return this.SendCircle_visible || this.generateInfo_visible || this.isPosterShow;
  }
},
methods:{
  stopTouch(e){
    e.preventDefault();
  },
},
watch: { 
  popupStatus(val) {
    let preD = this.stopTouch;
    let options = { 
      passive: false, //强调默认事件
      capture: true, //早点禁止该事件 
    };
    if (val) {
      document.body.style.overflow = 'hidden';
      document.addEventListener('touchmove', preD, options); // 禁止页面滑动
    } else {
      document.body.style.overflow = ''; // 出现滚动条
      document.removeEventListener('touchmove', preD, options);
    }
  }
}

接下来对代码中的关键配置进行说明。

addEventListener参数详解

在调用addEventListener时,其第三个参数不仅支持布尔值,还可以是一个配置对象。

addEventListener(type, listener[, useCapture ]) addEventListener(type, listener[, options ])

当传入对象时,其默认配置如下所示:

capture: false passive: false once: false

其中,capture属性对应于旧版API中的useCapture参数;而once属性用于指定监听器是否只执行一次,若设为true,则在执行完毕后会自动移除该监听器。

passive选项对默认行为的影响

passive选项的引入是为了解决性能问题。由于浏览器无法预先判断监听器是否会调用preventDefault(),因此必须等待监听器执行完毕后再触发默认行为,这可能导致页面卡顿。若将passive设为true,浏览器将直接执行默认行为而无需等待,此时即使代码中调用了preventDefault()也不会生效。

以上内容即为移动端弹窗禁止滚动的实现原理及相关API详解,希望能为相关开发工作提供参考。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章