You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在页面加载显示loader时禁用页面滚动?

解决页面Loader显示时禁用滚动的问题

你之前给.loader-wrapper加overflow:hidden无效,是因为页面的滚动条属于<body>/<html>元素,不是loader容器本身,正确的做法是给根元素设置禁用滚动:

实现步骤

  • 给<body>添加一个控制滚动的类,通过添加/移除这个类来开关滚动
  • 配合Loader的显示/隐藏逻辑,在Loader展示时禁用滚动,结束后恢复

1. CSS 代码

/* 禁用页面滚动的类 */
.body-no-scroll {
  overflow: hidden;
}

/* 确保Loader全屏覆盖 */
.loader-wrapper {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100vh;
  background-color: #ffffff; /* 根据你的页面调整背景 */
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 9999; /* 保证Loader在最上层 */
}

2. JavaScript 代码

// 页面加载完成后启动Loader逻辑
window.addEventListener('load', () => {
  const body = document.body;
  const loader = document.querySelector('.loader-wrapper');

  // 禁用滚动
  body.classList.add('body-no-scroll');

  // 2.5秒后恢复滚动并隐藏Loader
  setTimeout(() => {
    body.classList.remove('body-no-scroll');
    loader.style.display = 'none';
  }, 2500);
});

移动端额外处理(可选)

如果需要兼容移动端触摸滑动,可以添加触摸事件阻止:

// 阻止触摸滚动的函数
function blockTouchScroll(e) {
  e.preventDefault();
}

// 页面加载时添加触摸阻止
window.addEventListener('load', () => {
  document.addEventListener('touchmove', blockTouchScroll, { passive: false });

  // 2.5秒后移除阻止
  setTimeout(() => {
    document.removeEventListener('touchmove', blockTouchScroll);
  }, 2500);
});

内容的提问来源于stack exchange,提问作者bobacup

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:22:40