核心是用异步机制协调动画时序,通过Promise封装、队列调度、取消暂停控制及状态响应式更新,实现非阻塞、可管理、高可控的动画流水线执行。

核心在于用异步机制控制动画的启动时机和执行顺序,避免阻塞、冲突或竞态,让多个动画像流水线一样依次或按需运行。
用 Promise 封装动画,链式调用
每个动画操作都包装成返回 Promise 的函数,在动画完成时 resolve。这样就能用 .then() 或 await 保证前一个结束才触发下一个:
- 原生 CSS 动画可监听
transitionend或animationend事件来 resolve - Web Animations API 的
animation.finished是原生 Promise,直接 await 即可 - GSAP、Lottie 等库通常自带 Promise 支持,如
tl.then(() => {...})
用队列结构管理任务顺序
不依赖“写死的 await 链”,而是把动画函数推入队列,由统一调度器逐个取出并执行:
- Dart/Flutter 中可用
Queue<future>></future>,循环await queue.removeFirst() - JavaScript 可用数组 + async 函数驱动:
while(queue.length) await queue.shift()() - Node.js 或 Python 后端常用
asyncio.Queue或 Celery 实现生产者-消费者模型
支持取消、暂停与并发控制
真正的“优雅”体现在可控性上,而不仅是顺序:
- 传入
CancellationToken(Unity UniTask)或AbortSignal(JS)随时中断动画 - 限制并发数,比如同时只允许 2 个位移动画运行,其余排队等待
- 为关键动画设置超时,防止卡死:例如 3 秒未完成则 fallback 到下一帧
结合状态与响应式更新
动画不是孤立动作,而是 UI 状态变化的视觉反馈:
- 用响应式变量(如 Unity 的
AsyncReactiveProperty、Vue 的 ref)驱动动画参数 - 动画开始前校验当前状态是否仍有效,避免“旧请求覆盖新状态”
- 队列中每个任务可携带上下文(如 target element、duration、easing),提升复用性

















