如何优化Lenis Smooth Scroll解决页面底部滚动受限问题

来源:网站主作者:不吃香菜头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何优化Lenis Smooth Scroll解决页面底部滚动受限问题》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何优化Lenis Smooth Scroll解决页面底部滚动受限问题》有用,将其分享出去将是对创作者最好的鼓励。

Lenis Smooth Scroll是前端开发中常用的平滑滚动工具,能够实现流畅的页面滚动效果,但部分场景下会出现页面底部滚动受限的问题,导致底部内容无法完全展示,影响用户体验。

问题常见表现与成因

底部滚动受限的典型表现有两种:一是滚动到页面底部时,鼠标滚轮或触摸滑动无法继续触发,底部还有内容但无法滚动到可视区域;二是页面底部内容被截断,部分元素始终无法进入视口。常见成因包括以下几点:

  • Lenis初始化时未正确设置滚动容器的边界参数,导致计算的可滚动高度小于实际页面高度
  • 页面存在动态加载的内容,Lenis初始化时未获取到最新的页面高度,滚动范围没有同步更新
  • 页面布局中设置了固定的底部内边距或者容器高度限制,压缩了实际可滚动区域
  • Lenis的平滑滚动动画参数设置不合理,导致滚动到边界时出现卡顿或提前停止

优化方案与代码实现

1. 调整Lenis初始化参数

首先需要确认Lenis的初始化配置中,wrappercontent参数是否正确指向滚动容器和页面内容容器,同时开启边界检测相关配置。以下是基础的正确初始化示例:

// 初始化Lenis实例
const lenis = new Lenis({
  wrapper: document.documentElement, // 滚动容器,默认是html元素
  content: document.documentElement, // 内容容器,默认是body元素
  duration: 1.2, // 滚动动画时长
  easing: (t) => Math.min(1, 1.001 - Math.pow(2, -10 * t)), // 缓动函数
  smooth: true, // 开启平滑滚动
  direction: 'vertical', // 垂直滚动
  gestureDirection: 'vertical',
  smoothTouch: false,
  touchMultiplier: 2,
  // 开启边界检测,避免滚动超出实际范围
  infinite: false,
  // 允许滚动到容器的最底部
  allowSmoothScrollOnTouch: true
})

// 启动Lenis的滚动更新循环
function raf(time) {
  lenis.raf(time)
  requestAnimationFrame(raf)
}
requestAnimationFrame(raf)

2. 动态更新滚动高度

如果页面存在动态加载的内容,需要在内容加载完成后调用Lenis的resize方法更新滚动范围,避免初始化时的高度计算不准确:

// 模拟动态加载底部内容
function loadMoreContent() {
  const contentContainer = document.querySelector('.page-content')
  const newContent = document.createElement('div')
  newContent.className = 'bottom-section'
  newContent.innerHTML = '<p>这是动态加载的底部内容</p>'
  contentContainer.appendChild(newContent)
  
  // 内容加载完成后更新Lenis的滚动计算
  lenis.resize()
}

// 假设点击按钮触发加载
document.querySelector('.load-btn').addEventListener('click', loadMoreContent)

3. 修正页面布局参数

检查CSS中是否存在不合理的布局设置,比如给bodyhtml设置了固定的height或者overflow限制,以下是推荐的页面基础布局样式:

/* 避免给html和body设置固定高度,保证内容可以正常撑开 */
html, body {
  margin: 0;
  padding: 0;
  /* 不要设置height: 100%,会导致内容超出时被截断 */
  overflow-x: hidden;
}

.page-content {
  min-height: 100vh;
  /* 底部预留合理的padding,避免内容和浏览器工具栏重叠 */
  padding-bottom: 20px;
}

4. 处理边界滚动事件

如果仍然存在底部滚动卡顿的问题,可以监听Lenis的滚动事件,手动修正边界滚动逻辑:

// 监听滚动事件,检测是否到达底部
lenis.on('scroll', (e) => {
  // 获取当前滚动位置、页面总高度、视口高度
  const scrollTop = e.scroll
  const scrollHeight = document.documentElement.scrollHeight
  const clientHeight = document.documentElement.clientHeight
  
  // 如果已经滚动到距离底部10px以内,且还有剩余内容,手动触发修正
  if (scrollHeight - scrollTop - clientHeight < 10) {
    // 强制更新滚动参数
    lenis.resize()
  }
})

验证优化效果

完成上述配置后,可以通过以下方式验证问题是否解决:

  • 滚动页面到最底部,检查所有内容是否都能进入可视区域
  • 动态加载内容后,再次滚动到底部,确认新加载的内容可以正常展示
  • 调整浏览器窗口大小,测试响应式布局下底部滚动是否正常

如果问题仍然存在,可以检查是否有其他全局的滚动监听事件干扰了Lenis的正常工作,或者尝试降低Lenis的动画时长参数,减少动画带来的边界计算误差。

Lenis_Smooth_Scroll平滑滚动页面滚动优化滚动受限修改时间:2026-06-18 21:51:40

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。