Lenis 平滑滚动实战:3 行代码接入,4 组参数定手感
Lenis 平滑滚动实战3 行代码接入4 组参数定手感【免费下载链接】lenisSmooth scroll as it should be项目地址: https://gitcode.com/GitHub_Trending/le/lenisLenis拉丁语smooth是基于原生滚动实现的轻量级平滑滚动库smooth scroll核心功能是为滚动驱动动画、视差、WebGL 同步提供一条可控的滚动链路。本文覆盖最小接入、手感调参、生态联动与高频问题排查。为什么是 Lenis对比两条技术路线平滑滚动库大致分两类一类用transform劫持容器位置实现自由度高但脱离原生滚动Lenis 属于另一类——它接管输入、保留浏览器真实滚动位置。这个区别直接决定了后续成本维度LenisLocomotiveScrollify实现方式原生滚动 输入接管独立滚动容器jQuery 分节跳转打包体积约 3KBgzip约 10KB约 6KB依赖 jQuery运行时依赖00jQueryposition: sticky/ 锚点原生可用需自行兼容锚点可用Lenis 的核心循环只有五步源码注释写得很直白核心引擎实现监听wheel→ 阻止默认滚动 → 归一化 delta → 累加到targetScroll→ 在 RAF 中把当前值逼近目标值。事件归一化逻辑在 virtual-scroll其中按deltaMode换算滚轮增量屏蔽了 Windows 行式滚动与 Mac 像素式滚动的差异。接入落地从 npm 到可运行的最小闭环1. 最小代码npm i lenis然后import Lenis from lenis import lenis/dist/lenis.css const lenis new Lenis() lenis.on(scroll, (e) { console.log(e.scroll, e.progress) // 每帧回调 }) function raf(time) { lenis.raf(time) // 每帧推进一次插值 requestAnimationFrame(raf) } requestAnimationFrame(raf)不想手写循环就传autoRaf: true由 Lenis 自己维护 RAFplayground/core/browser.js 是手动版示例。2. 配套 CSS推荐样式很短直接看 lenis.csshtml.lenis, html.lenis body { height: auto; } .lenis [data-lenis-prevent] { overscroll-behavior: contain; }缺了height: autooverflow高度计算会出错data-lenis-prevent系列属性则用于给嵌套滚动区豁免平滑。3. 拿到运行时状态每个scroll事件携带实例本身常用字段scroll当前值、progress0~1 进度、velocity速度、direction1/-1、isScrollingfalse/native/smooth。调试时可以把animatedScroll与window.scrollY并排打出来核对参考 playground/core/test.ts 里的 debug 面板写法。 调校手感按影响面分三组核心手感lerp / duration / easinglerp默认0.1是每帧向目标值逼近的比例值越小追得越慢、阻尼感越强是手感的头号变量。duration秒与easing组成另一套时间基动画二者会互相接管只要定义了duration就用时间基lerp不生效见 配置类型定义。默认缓动是Math.min(1, 1.001 - 2 ** (-10 * t))近似 easeOutExpo起快收慢。输入灵敏度wheelMultiplier / touchMultiplier / gestureOrientationwheelMultiplier与touchMultiplier默认均为1放大或缩小输入增量gestureOrientation决定采纳哪个轴的 delta默认verticalboth时取绝对值更大的轴。想按条件拦截用prevent: (node) boolean或virtualScroll回调可改写deltaY再放行。边界与特殊行为syncTouch默认false触摸端也走平滑链路惯性强度由touchInertiaExponent默认1.7控制iOS 16 以下可能不稳overscroll默认true嵌套容器越界时是否继续回传事件语义类似 CSSoverscroll-behavioranchors: true点锚点链接时走平滑scrollToinfinite循环滚动触摸端需配合syncTouch: trueallowNestedScroll自动放行嵌套可滚区但每帧要检查 DOM 树页面很重时改用data-lenis-prevent生态联动GSAP、snap 与框架适配与 GSAP ScrollTrigger 同步官方推荐让 GSAP ticker 驱动 Lenis避免双循环打架const lenis new Lenis() lenis.on(scroll, ScrollTrigger.update) gsap.ticker.add((time) { lenis.raf(time * 1000) // ticker 以秒计转为毫秒 }) gsap.ticker.lagSmoothing(0) // 关掉补偿避免双重平滑snap分节吸附Lenis 不支持 CSSscroll-snap官方用 lenis/snap 补齐import Snap from lenis/snap const snap new Snap(lenis) snap.add(500) // 在 500px 处吸附 snap.addElement(document.querySelector(.section), { align: center, // start | center | end })框架包React 包提供ReactLenisProvider 与useLenisHookprovider 实现root实例会写入全局 storeuseLenis(cb, deps, priority)按优先级接收每次scroll回调组件卸载自动清理。Vue 与 Nuxt 模块packages/vue/提供等价的组合式 API。排障四个高频症状按症状 → 根因 → 修复走滚轮转了但页面不动根因RAF 循环没跑。raf不推进插值永远不执行。修复autoRaf: true或确认手动循环没被卸载逻辑提前中断同时确认引入了配套 CSS。页面里有区域该滚动却滚不动根因平滑层把事件吃掉了。修复给嵌套滚动区加data-lenis-prevent或初始化时allowNestedScroll: true需要精确控制时用prevent回调返回true放行该节点。点锚点直接跳变根因默认不走平滑锚点浏览器按原生行为瞬时定位。修复anchors: true可传ScrollToOptions如offset微调落点页面内跳转打断惯性可加stopInertiaOnNavigate: true。两个已知硬限制iframe 内滚轮事件不回传Lenis 无法接管平滑期间 CSS 里 iframe 被设为pointer-events: none缓解误触Safari 的 RAF 上限 60fps高刷屏上 Safari 的表现不会超过桌面 Chrome。这两条来自 README 的 Limitations 一节属于引擎限制而非配置问题。适用边界需要 CSSscroll-snap语义、依赖 120Hz 平滑渲染或主交互发生在 iframe 内的场景Lenis 不是合适选择。完整参数表、事件与方法说明见仓库根目录 README各子包文档见 packages/。【免费下载链接】lenisSmooth scroll as it should be项目地址: https://gitcode.com/GitHub_Trending/le/lenis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Markdown 写作指南:从编辑器选型到高频语法与生态联动

Markdown 写作指南:从编辑器选型到高频语法与生态联动

很多人第一次搜"Markdown 安装使用教程",以为是下载某个叫 Markdown 的软件。其实 Markdown 是一种轻量级标记语法,不是什么独立程序。真正需要你装的是编辑器——一个好用的编辑器,能让 Markdown 从"记事本里写符号"变成…

2026/9/22 5:24:26 阅读更多 →
Helmet之Strict-Transport-Security实战:如何用HSTS强制HTTPS并正确设置preload

Helmet之Strict-Transport-Security实战:如何用HSTS强制HTTPS并正确设置preload

Helmet之Strict-Transport-Security实战:如何用HSTS强制HTTPS并正确设置preload 【免费下载链接】helmet Help secure Express apps with various HTTP headers 项目地址: https://gitcode.com/gh_mirrors/he/helmet 在 Express 应用中使用 Helmet 安全中间件…

2026/9/21 19:46:45 阅读更多 →
Windows复制文件提示“资源正在使用中”?从文件句柄占用到MTP的完整排查方案

Windows复制文件提示“资源正在使用中”?从文件句柄占用到MTP的完整排查方案

不知道你有没有碰上过这种憋屈事:手机连着电脑,想往硬盘里备份一批照片和视频,刚点复制,Windows 就弹一个“请求的资源正在使用中”的提示,然后整个复制任务直接中断,试了几次都是同一个结果,换…

2026/9/21 16:05:08 阅读更多 →

最新新闻

华图网校首页速查:3个面试必问坑,解决配置卡半天难题

华图网校首页速查:3个面试必问坑,解决配置卡半天难题

华图网校首页速查:3个面试必问坑,解决配置卡半天难题 配置环境就卡半天,是不是你也遇到过这种让人血压飙升的情况?明明照着教程一步步来,结果就是报错,或者页面加载不出来,最后发现是路径没配对。别急,这不仅是新手常犯的错,也是 面试必问…

2026/9/22 5:24:27 阅读更多 →
室内cad避坑指南:一文搞懂常见报错与代码修复实战

室内cad避坑指南:一文搞懂常见报错与代码修复实战

室内cad避坑指南:一文搞懂常见报错与代码修复实战 刚接手室内CAD自动化脚本,或者刚入职建筑科技公司写绘图插件时,你是不是也被那一长串红色的 StackTrace 搞崩溃过?看着满屏的 NullReferenceException 或者…

2026/9/22 5:24:27 阅读更多 →
一文搞懂cad密令:别再乱敲命令,选对工具效率翻倍

一文搞懂cad密令:别再乱敲命令,选对工具效率翻倍

一文搞懂cad密令:别再乱敲命令,选对工具效率翻倍 复制来的代码跑不通,报错信息像天书,是不是每次调试都让你头大?别急,这通常不是代码的问题,而是你用的“密令”不对。很多开发者在跨平台迁移或接手旧项目时,习惯性地沿用旧环境的命令集,结果在…

2026/9/22 5:24:27 阅读更多 →
yahoo.it接口超时?3招性能优化,面试必问

yahoo.it接口超时?3招性能优化,面试必问

yahoo.it接口超时?3招性能优化,面试必问 刚接手项目,从掘金技术社区复制了一段调用yahoo.it数据的代码,本地跑得好好的,一上线就卡死。报错信息一堆,完全不知道从哪下手调。这种“复制即报错”的噩梦,在性能优化领域太常见了。更扎心…

2026/9/22 5:24:27 阅读更多 →
3个步骤搞定模拟人生2手写实现 新手避坑指南

3个步骤搞定模拟人生2手写实现 新手避坑指南

3个步骤搞定模拟人生2手写实现 新手避坑指南 复制来的《模拟人生2》游戏逻辑代码,跑起来全是乱码或者卡死?别急着删库,90%的新手都栽在状态机同步和内存泄漏这两个坑里。这不是玄学,是典型的工程落地与底层原理脱节。今天不聊虚的,直接拆解如何从…

2026/9/22 5:24:27 阅读更多 →
3步搞定国产在线视频放线视频卡顿:源码解析与性能实战

3步搞定国产在线视频放线视频卡顿:源码解析与性能实战

3步搞定国产在线视频放线视频卡顿:源码解析与性能实战 官方文档翻了三遍还是找不到卡顿根源?别急,国产在线视频放线视频的性能优化核心不在参数堆砌,而在 源码解析 中的关键路径重构。我直接给你拆解底层逻辑。 性能瓶颈定位…

2026/9/22 5:23:27 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →