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

Lenis平滑滚动(GSAP)运行异常:求助无需关闭浏览器设置的解决方案

解决平滑滚动冲突导致的页面滚动延迟问题

问题根源

浏览器原生平滑滚动与你代码中实际使用的LocomotiveScroll自定义滚动逻辑发生冲突,两者同时处理滚动事件,引发了滚动延迟。

解决办法

1. 让LocomotiveScroll完全接管滚动,禁用原生平滑滚动

初始化时通过配置项关闭原生滚动支持,同时给滚动容器设置正确的CSS样式:

useEffect(() => {
  (async () => {
    const LocomotiveScroll = (await import("locomotive-scroll")).default;
    const locomotiveScroll = new LocomotiveScroll({
      el: document.querySelector('[data-scroll-container]'), // 需提前在页面根滚动容器上添加该属性
      smooth: true,
      nativeScroll: false, // 禁用浏览器原生滚动,由Locomotive全权处理
      getDirection: true
    });
  })();
  window.scrollTo(0, 0);
}, []);

对应的CSS样式:

[data-scroll-container] {
  overflow: hidden;
  height: 100vh;
}

2. 调整初始化时机,避免内容未加载完成就启动滚动

如果页面存在动态渲染内容,延迟初始化滚动工具能避免竞态问题:

useEffect(() => {
  const initScroll = async () => {
    // 等待页面内容渲染完成,可根据实际情况替换为更精准的监听(如DOMContentLoaded)
    await new Promise(resolve => setTimeout(resolve, 100));
    const LocomotiveScroll = (await import("locomotive-scroll")).default;
    const locomotiveScroll = new LocomotiveScroll({
      nativeScroll: false,
      smooth: true
    });
  };
  initScroll();
  window.scrollTo(0, 0);
}, []);

3. 若确实混用了GSAP平滑滚动,需禁用GSAP的原生滚动支持

如果你同时启用了GSAP的平滑滚动插件,要确保两者逻辑不冲突:

// 在GSAP初始化时禁用原生平滑滚动
gsap.config({ smoothScroll: false });

重要提示

  • 页面中只能保留一套滚动处理逻辑,要么用LocomotiveScroll,要么用浏览器原生,禁止同时启用
  • 滚动容器的height和overflow样式是LocomotiveScroll正常工作的必要条件

内容的提问来源于stack exchange,提问作者Cauã Wilian Pereira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:49:55