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

Lenis Scroll问题:无法滚动至页面底部的排查求助

Webflow上Lenis平滑滚动无法滚到底部的修复方案

问题根源

Lenis初始化时会计算当前页面的总高度,但Webflow里不少内容(比如延迟加载的图片、动态渲染的组件)是在Lenis启动后才加载完成的,导致Lenis缓存的高度和实际页面高度不匹配。调整窗口时Lenis会自动重新计算高度,所以滚动恢复正常。

具体修复方法

1. 监听DOM变化,实时更新Lenis高度

用MutationObserver监听页面内容的变化,只要有新元素加载完成,就强制Lenis重新计算高度:

const lenis = new Lenis()

lenis.on('scroll', (e) => {
  console.log(e)
})

function raf(time) {
  lenis.raf(time)
  requestAnimationFrame(raf)
}

requestAnimationFrame(raf)

// 监听body下的DOM变化,触发高度重算
const observer = new MutationObserver(() => {
  lenis.resize()
})

observer.observe(document.body, {
  childList: true,
  subtree: true
})

如果觉得全局监听太消耗性能,可以只监听Webflow动态内容的容器(比如CMS列表的父元素),缩小监听范围。

2. 等页面完全加载后再初始化Lenis

把Lenis的初始化代码放在window.load事件里,等所有图片、动态资源加载完成后再启动Lenis:

window.addEventListener('load', () => {
  const lenis = new Lenis()

  lenis.on('scroll', (e) => {
    console.log(e)
  })

  function raf(time) {
    lenis.raf(time)
    requestAnimationFrame(raf)
  }

  requestAnimationFrame(raf)
})

小提示:如果担心window.load等待时间太长出现原生滚动闪屏,可以在CSS里先隐藏滚动条,等Lenis初始化后再显示:

body { overflow: hidden; }

然后在Lenis初始化后再移除这个样式。

3. 定时触发高度重算(兜底方案)

要是找不到具体的内容加载触发点,就设置一个定时任务,每隔一段时间让Lenis重新计算一次高度:

const lenis = new Lenis()

lenis.on('scroll', (e) => {
  console.log(e)
})

function raf(time) {
  lenis.raf(time)
  requestAnimationFrame(raf)
}

requestAnimationFrame(raf)

// 每2秒更新一次高度,可根据实际情况调整间隔
setInterval(() => {
  lenis.resize()
}, 2000)

4. 检查代码放置位置

确保Lenis的初始化代码放在Webflow后台的Before tag区域,而不是里,这样能保证DOM结构基本加载完成后再初始化Lenis,减少初始高度计算的偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:40:01