用途:FrameVideo 通过 css 运行时适配器定位 CSS 关键帧动画,适合简单重复图案、背景运动、微光、发光、遮罩等非序列化装饰效果。场景编排通常用 GSAP 更清晰;CSS 动画更适合单个元素、固定时长的运动。
主要能力:适配器会查找计算后 animation-name 的元素,在可用时定位其浏览器 Animation 句柄,否则回退为暂停加负 animation-delay。支持关键帧、animation-delay 计时、animation-fill-mode、animation-play-state 等。
使用方式:动画元素需在运行时初始化完成前进入 DOM;带计时的元素加 data-start 使本地动画时间与片段对齐;使用有限的 animation-duration 与 animation-iteration-count;优先 animation-fill-mode: both。可用 CSS 自定义属性做错位(stagger),如 animation-delay: calc(var(--i) * 120ms);也可用逗号分隔的 animation 列表串联多段动画。迭代次数按片段时长除以动画时长向上取整。
适用场景:已知重复次数的装饰循环、遮罩/发光/微光/颗粒/轻微视差、单元素入场。可与 GSAP 共存:CSS 负责装饰,GSAP 负责字幕时序、转场与多元素精确错位,两者都遵循 FrameVideo 全局时间轴。
限制:不要用于场景编排、复杂时间轴、交互式动画(hover、滚动、用户触发)或布局属性动画(top、left、width、height 会触发重排,应改用 transform)。除非确认浏览器暴露可定位的 WAAPI 句柄,否则避免无限循环。避免依赖挂钟 JavaScript、hover 状态和用户事件类切换。性能上尽量只动画 transform 与 opacity。
校验:编辑后可运行 npx framevideo lint 检查计时契约,npx framevideo validate 检查运行时错误;并手动做定位、迭代次数、填充模式与 GPU 层检查。