CSS 滚动驱动动画(scroll-timeline):无 JS 实现滚动特效
一、传统方案的痛点以前实现滚动动画需要 JavaScript 监听 scroll 事件12345678910window.addEventListener(scroll, () {constscrollTop window.scrollY;constprogress scrollTop / (document.body.scrollHeight - window.innerHeight);// 更新进度条progressBar.style.width ${progress * 100}%;// 视差效果parallaxElement.style.transform translateY(${scrollTop * 0.5}px);});问题性能开销大频繁触发需要手动计算代码复杂二、scroll-timeline 的解决方案CSS 滚动驱动动画让元素的动画进度与滚动位置绑定无需 JavaScript。基础语法123456789keyframes fade-in{from{ opacity: 0; transform: translateY(50px); }to { opacity: 1; transform: translateY(0); }}.element {animation: fade-inlinear;animation-timeline: scroll();/* 绑定到滚动 */}三、scroll() 函数scroll()创建一个滚动时间线将动画进度与滚动位置关联。语法1animation-timeline: scroll(scroller axis);参数scroller: 滚动容器nearest | root | selfaxis: 滚动方向block | inline | y | x12345678/* 最近的滚动祖先垂直方向 */animation-timeline: scroll(nearest block);/* 根滚动容器水平方向 */animation-timeline: scroll(root inline);/* 元素自身垂直方向 */animation-timeline: scroll(self y);四、实战案例案例 1滚动进度条1divclassprogress-bar/div12345678910111213141516.progress-bar {position:fixed;top: 0;left: 0;height: 4px;background: linear-gradient(to right, #4caf50, #2196f3);transform-origin: left;animation: grow-progress linear;animation-timeline: scroll(root block);}keyframes grow-progress {from{ transform: scaleX(0); }to { transform: scaleX(1); }}效果进度条宽度随页面滚动增长。案例 2滚动淡入123456789101112131415161718.fade-in-section {opacity: 0;transform: translateY(50px);animation: fade-inlinear;animation-timeline: view();/* 元素进入视口时触发 */}keyframes fade-in{from{opacity: 0;transform: translateY(50px);}to {opacity: 1;transform: translateY(0);}}案例 3视差滚动12345678910111213141516.parallax-bg {position:fixed;top: 0;width: 100%;height: 100vh;z-index: -1;animation: parallax linear;animation-timeline: scroll(root block);}keyframes parallax {to {transform: translateY(50%);}}案例 4图片缩放1234567891011121314151617.hero-image {width: 100%;height: 100vh;object-fit: cover;animation: zoom-outlinear;animation-timeline: scroll(root block);}keyframes zoom-out{from{transform: scale(1.2);}to {transform: scale(1);}}五、view() 函数view()创建一个视图时间线当元素进入/离开视口时触发动画。语法1animation-timeline: view(axis inset);123456789101112/* 元素进入视口时触发 */.element {animation: fade-inlinear;animation-timeline: view();}/* 设置触发范围 */.element {animation: fade-inlinear;animation-timeline: view(block 20% 20%);/* 在视口上下 20% 的范围内触发 */}六、animation-range控制动画在滚动范围内的哪个阶段执行。123456.element {animation: fade-inlinear;animation-timeline: view();animation-range: entry 0% entry 100%;/* 只在进入阶段执行动画 */}范围关键字entry: 元素进入视口exit: 元素离开视口contain: 元素完全在视口内cover: 整个过程12345678910111213/* 进入时淡入 */.fade-in{animation: fade linear;animation-timeline: view();animation-range: entry 0% entry 100%;}/* 离开时淡出 */.fade-out{animation: fade linear reverse;animation-timeline: view();animation-range: exit 0% exit 100%;}七、组合使用多个动画阶段12345678910111213141516171819.card {animation:slide-inlinear,rotate linear;animation-timeline: view();animation-range:entry 0% entry 50%,entry 50% entry 100%;}keyframes slide-in{from{ transform: translateX(-100%); }to { transform: translateX(0); }}keyframes rotate {from{ transform: rotate(0deg); }to { transform: rotate(360deg); }}视差分层1234567891011121314151617181920212223242526.layer-1 {animation: parallax-slow linear;animation-timeline: scroll();}.layer-2 {animation: parallax-medium linear;animation-timeline: scroll();}.layer-3 {animation: parallax-fast linear;animation-timeline: scroll();}keyframes parallax-slow {to { transform: translateY(20%); }}keyframes parallax-medium {to { transform: translateY(40%); }}keyframes parallax-fast {to { transform: translateY(60%); }}八、浏览器支持滚动驱动动画在现代浏览器中支持Chrome 115Edge 115Safari 尚未支持Firefox 尚未支持特性检测1234567891011121314supports (animation-timeline: scroll()) {/* 支持滚动动画 */.element {animation: fade-inlinear;animation-timeline: scroll();}}supports not (animation-timeline: scroll()) {/* 降级方案使用 JavaScript */.element {opacity: 1;}}Polyfill1script srchttps://flackr.github.io/scroll-timeline/dist/scroll-timeline.js/script九、性能优化1. 使用 transform 和 opacity1234567891011121314151617181920212223/* ✅ 性能好只触发合成 */keyframes good {from{opacity: 0;transform: translateY(50px);}to {opacity: 1;transform: translateY(0);}}/* ❌ 性能差触发重排 */keyframes bad {from{top: 50px;width: 100px;}to {top: 0;width: 200px;}}2. 使用 will-change12345.animated-element {will-change: transform, opacity;animation: fade-inlinear;animation-timeline: scroll();}3. 限制动画元素数量123456/* 只对可见区域的元素应用动画 */.element {animation: fade-inlinear;animation-timeline: view();animation-range: entry 0% cover 100%;}十、实用技巧1. 数字滚动计数1234567891011121314151617181920property --num {syntax:integer;initial-value: 0;inherits:false;}.counter {counter-reset: numvar(--num);animation: count linear;animation-timeline: view();}.counter::after {content: counter(num);}keyframes count {from{ --num: 0; }to { --num: 100; }}2. 文字逐字显示12345678910111213.text {animation: reveal linear;animation-timeline: view();}keyframes reveal {from{clip-path: inset(0 100% 0 0);}to {clip-path: inset(0 0 0 0);}}3. 图片模糊到清晰1234567891011.image {filter: blur(10px);animation: unblur linear;animation-timeline: view();}keyframes unblur {to {filter: blur(0);}}十一、与 JavaScript 对比

相关新闻

潮汛网产业观察:11.98万至99万!优必选U1超仿生机器人刷屏全网,人形AI从工具走向情感时代

潮汛网产业观察:11.98万至99万!优必选U1超仿生机器人刷屏全网,人形AI从工具走向情感时代

潮汛网讯:近日,国内人形机器人龙头优必选正式发布全新超仿生人形机器人U1系列,凭借极致仿生外观、情感交互能力以及11.98万至99万元的梯度定价,迅速引爆全网舆论,登顶各大社交平台热搜榜单,成为当下最受争议…

2026/7/2 3:08:39阅读更多 →
智能课本解析器:一键下载国家中小学智慧教育平台电子教材

智能课本解析器:一键下载国家中小学智慧教育平台电子教材

智能课本解析器:一键下载国家中小学智慧教育平台电子教材 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本内容。 项目地…

2026/7/2 3:08:39阅读更多 →
《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战

《Kingbase护城河》——猎捕慢查询:执行计划的微观解析与索引调优实战

“为什么这条 SQL 跑得这么慢?”——猎捕慢查询:执行计划的微观解析与索引调优实战 在过去的专栏里面,我们把数据库的安全问题搞了搞,像僵尸进程、行锁死锁,还有磁盘满的这些情况,都给处理了。那么数据库不…

2026/7/2 3:08:39阅读更多 →
Linux系统中的软连接和硬连接

Linux系统中的软连接和硬连接

软连接概述 软连接类似Windows中的快捷方式,本身是一个独立文件,有自己的inode,内容只是指向另一个文件的路径字符串。 其特点如下: 可以跨文件系统、跨分区、跨磁盘可以链接目录源文件删除后,软链接变成死链接&…

2026/7/2 4:38:47阅读更多 →
2026智能门锁行业白皮书:为什么说C级直插锁芯+3D活体识别是2026年的技术底线?

2026智能门锁行业白皮书:为什么说C级直插锁芯+3D活体识别是2026年的技术底线?

2026年,随着新版防盗锁强制性国标落地,智能门锁与传统机械锁被拉到同一安全考场。2025年智能锁全渠道销量达1781万套,城市普及率接近39.5%。面对代际更替,消费者如何明智抉择?一、智能锁的三大代际优势消除钥匙焦虑&am…

2026/7/2 4:38:47阅读更多 →
深度解析 diff-cover 架构设计:企业级代码覆盖率分析实战指南

深度解析 diff-cover 架构设计:企业级代码覆盖率分析实战指南

深度解析 diff-cover 架构设计:企业级代码覆盖率分析实战指南 【免费下载链接】diff_cover Automatically find diff lines that need test coverage. 项目地址: https://gitcode.com/gh_mirrors/di/diff_cover diff-cover 是一款专注于代码质量管理的 Pytho…

2026/7/2 4:38:47阅读更多 →
摩尔投票法:线性时间寻找多数元素的优雅算法

摩尔投票法:线性时间寻找多数元素的优雅算法

摩尔投票法:线性时间寻找多数元素的优雅算法 在算法面试和数据处理中,我们常遇到一类问题:给定一个长度为 n 的数组,找出其中出现次数超过 n/2 的 “多数元素”(众数)。若不做特殊限制,最直观的…

2026/7/2 4:38:47阅读更多 →
最近体验了一下 Visible Coding,AI 编程方式确实变了

最近体验了一下 Visible Coding,AI 编程方式确实变了

最近在体验 Visible Coding 相关的一些开发方式,最大的感受就是:以前更多是「写代码」,现在越来越像是在「描述需求」。 对于一些简单的工具、脚本或者页面,只需要把需求描述清楚,AI 就能够快速生成一个可运行的版本&…

2026/7/2 4:38:47阅读更多 →
Dify接入高德地图MCP服务详细配置教程

Dify接入高德地图MCP服务详细配置教程

一、获取高度地图API KEY 1、注册成为开发者 进入高德开放平台:https://lbs.amap.com/ 注册成为开发者,需要实名认证 2、获取应用API Key 控制台-->应用管理-->我的应用 (1)点击创建新应用,弹出新建应用弹窗…

2026/7/2 4:33:45阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →