用途 本条目介绍 Anime.js 在 HyperFrames 中的接入方式。HyperFrames 可以通过其 animejs 运行时适配器对 Anime.js 实例进行 seek(定位)操作:合成(composition)持有动画对象,HyperFrames 持有时钟。也就是说,动画的播放进度由 HyperFrames 统一控制,Anime.js 自身不驱动时间,因此可以实现可定位、可复现的动画编排。
主要能力与契约 在合成初始化阶段同步创建动画或时间线。 设置 autoplay: false,使 Anime.js 不按自身时钟自动推进。 将每个返回的动画或时间线注册到 window.__hfAnime。 使用有限的时长和循环次数。 避免使用基于真实时钟时间、网络状态或无种子随机数来修改 DOM 的回调。 适配器会用 instance.seek(timeMs) 定位每个已注册实例,其中 timeMs 是 HyperFrames 时间(毫秒)。
使用方式 基础模式:引入 Anime.js IIFE 构建(示例使用 https://cdn.jsdelivr.net/npm/animejs@4.0.2/lib/anime.iife.min.js),调用 anime({...}) 创建动画,设置 autoplay: false,然后把返回对象 push 进 window.__hfAnime。
时间线模式:使用 anime.timeline({ autoplay: false, easing: "easeOutCubic" }),通过 tl.add() 依次添加动画片段,可指定绝对起始时间(如 250),最后同样将时间线注册到 window.__hfAnime。
模块构建:如果使用 ES module 构建,适配器不关心实例如何创建,只要求返回对象暴露 seek()、pause(),最好还有 play()。示例中从 https://cdn.jsdelivr.net/npm/animejs/+esm 导入 animate 并注册实例。
适用场景 适合使用 Anime.js 语法编写的小型 SVG 和 DOM 动效(修饰性动画)。 适合将导入的 Anime.js 示例改造为可由 seek 驱动的动画。 适合将多个相互独立的微动画推入同一个注册表统一管理。 复杂场景的序列编排建议使用 GSAP,除非用户明确要求使用 Anime.js;GSAP 仍是 HyperFrames 的主要创作路径。
限制与避免事项 不要保留 Anime.js 默认的 autoplay 行为。 不要依赖 anime.running 自动发现,而应显式地 window.__hfAnime.push(...)。 不要使用无限循环;应根据合成时长计算有限的重复次数。 不要在定时器、Promise、事件处理器中,或在异步资源加载完成之后再构建动画。
验证 编辑使用 Anime.js 的合成之后,运行: npx hyperframes lint npx hyperframes validate
参考 HyperFrames 适配器源码:packages/core/src/runtime/adapters/animejs.ts。 Anime.js 关于 autoplay、pause() 和 seek() 的文档:https://animejs.com/documentation/