用途:浏览器原生动画的选型与实现参考,帮助在 CSS Transitions、CSS Animations 与 WAAPI 之间做选择,并给出性能与兼容性注意点。资料还提到其配套 view-transitions 技能,用于状态或页面间导航动画。
主要能力:WAAPI 的 element.animate() 支持关键帧数组或紧凑对象、隐式 from/to,以及 duration(毫秒)、easing(默认 linear,区别于 CSS)、iterations、fill、direction、delay、composite 等选项;返回的 Animation 对象可 play、pause、reverse、finish、cancel,并可读取 playState、currentTime、playbackRate,使用 updatePlaybackRate、ready/finished Promise 与 onfinish、oncancel、onremove 事件。持久化样式推荐 anim.finished.then(() => { anim.commitStyles(); anim.cancel(); }),避免一直使用 fill:'forwards'。getAnimations() 可获取元素或文档的动画。CSS 侧包括 transition、@starting-style 首次渲染入场、allow-discrete 动画 display、@keyframes 与 animation-composition,以及 transitionend 等事件。滚动驱动动画涉及 ScrollTimeline、ViewTimeline、animation-timeline、animation-range,资料指向 references/scroll-driven.md 与 references/patterns.md。
使用方式:按需求选用 API;性能上只动画 transform、opacity、filter、clip-path,避免 width、height、top、left、background-color、box-shadow;will-change 仅在动画临近时添加并事后移除;避免布局抖动。上线前检查 prefers-reduced-motion、合理时长、commitStyles 替代持久 forwards、滚动动画加 @supports 与降级,并测试 Chrome、Safari 与 Firefox。
限制与注意:WAAPI duration 用毫秒而 CSS 用秒;其默认 easing 为 linear;transitions 无前置状态不会触发,需 @starting-style 或 rAF 延迟;transitionend 被中断时不触发,不宜作为唯一清理手段;animation-duration: auto 是 CSS 滚动时间线所需。资料给出的 2025 浏览器支持中,interpolate-size 仅 Chrome/Edge 129+,Firefox 与 Safari 不支持;滚动驱动在 Firefox 需 flag,Safari 18+ 为部分支持。具体价格与收费暂未提供。