1. Motion One(基于 Web Animations API)
Motion One 作为基于 Web Animations API 的动画库有哪些特点与工程价值?
- 基于 WAAPI 的实现架构
- 与 GSAP 等框架型动画库的对比
- 体积、性能与用法
Motion One(@motionone/dom)是建立在 Web Animations API(WAAPI)之上的轻量动画库:核心 animate() 直接驱动 Element.animate()(浏览器合成器线程执行动画),自带 easing(spring 弹簧、滑环 easing)、keyframes、时间线编排(timeline)与滚动/视口驱动的 motion() 高级功能。工程价值:第一,体积——比 GSAP 小一个量级(~10KB gzip 内,GSAP 核心 ~23KB+,完整插件更多),按需引入(tree-shaking 友好);第二,性能——动画在合成器线程运行(transform/opacity 走合成,主线程不参与每帧计算),滚动驱动动画(scroll progress)与视口触发减少 JS 介入;第三,API——声明式参数(duration/easing/repeat/direction)与 WAAPI 对齐,容易与 CSS 动画心智模型衔接;React 生态有配套(motion 包的 useAnimate 等,与 Framer Motion 同门);第四,互操作——WAAPI 的事件(finish/cancel)与 getAnimations() 查询可混用,便于与其他动画方案共存。边界与取舍:能力上限低于 GSAP(无 ScrollTrigger 的完整生态、无 Draggable 等专有插件),复杂编排(时间线嵌套、动态回调)需更多手写;兼容性依赖 WAAPI(Safari 已支持 Element.animate,覆盖良好);自定义 easing 的数学表达力不如 GSAP 的贝塞尔自由曲线(但也有 spring 等)。选型:轻量需求(微交互、列表过渡、滚动动效)Motion One 更优;重量级营销/复杂时间线 GSAP 生态更全。
考察动画库的架构取向:WAAPI 之上封装 = 小体积 + 合成器性能 + 声明式,回答需对比 GSAP 给出"轻量 vs 完整"的选型判断。