2026-05-23 16:05:10
Web滚动驱动动画(Scroll-Driven Animations, SDA)通过将CSS动画或Web Animations API(WAAPI)与滚动行为关联,实现了由用户滚动而非时间驱动的动画效果。新语法采用animation-timeline、view-timeline和animation-range等CSS属性,替代了已废弃的@scroll-timeline,解决了多元素动画同步与交错的技术难题。
SDA将动画进度与滚动位置或元素可见性绑定,适用于视差滚动、渐入渐出、进度条等场景。其优势在于:
早期SDA使用@scroll-timeline语法,但因其设计局限已被废弃。当前推荐语法基于以下CSS属性:
通过view-timeline和animation-range,可为多个元素创建交错渐入动画。示例步骤如下:
(1)HTML结构<div class="scroll-container"> <div class="item">元素1</div> <div class="item">元素2</div> <!-- 更多元素... --></div>(2)CSS样式与动画.scroll-container { height: 400px; overflow-y: scroll; border: 1px solid #ccc;}.item { height: 150px; margin-bottom: 20px; background-color: #007bff; opacity: 0; transform: translateY(50px);}@keyframes fade-in-up { to { opacity: 1; transform: translateY(0); }}.item { animation: fade-in-up linear forwards; animation-timeline: view(); /* 关联视图时间轴 */ animation-range: entry 25% cover 50%; /* 定义播放范围 */}(3)关键点解析entry 25%:元素顶部进入视口并达到其高度的25%时,动画开始。
cover 50%:元素覆盖视口50%时,动画完成。
在复杂场景下(如动态生成元素或调整动画范围),可通过JavaScript增强灵活性。示例代码:
document.addEventListener('DOMContentLoaded', () => { const items = document.querySelectorAll('.item'); items.forEach((item, index) => { // 为每个元素设置不同的动画范围(增强交错感) // item.style.animationRange = `entry ${20 + index * 5}% cover ${60 + index * 5}%`; });});注意:纯CSS方案(view() + animation-range)在多数情况下已足够,且性能更优。
Web滚动驱动动画通过新语法(animation-timeline、view-timeline、animation-range)实现了多元素同步与交错动画的高效开发。关键步骤包括:
随着浏览器支持的完善,SDA将成为现代前端开发者提升用户体验的重要技能。