菜单 · 文档

最后更新:2026年8月12日

文档

对已注册的 timeline 发播放、暂停、seek 等命令。

播放控制

拿到 AnimationControls 之后,就可以对已注册的 timeline 发命令:播、停、seek、反向或取消。语义和底层用采样还是原生 lowering 无关。

控制命令

操作语义
play / pause / resume播放、暂停、从当前位置恢复
restartreset 后开始新生命周期
reverse反转方向,不隐式开始或恢复
seek立即采样,不触发 crossing event
seek_with_events采样并处理 call/loop/terminal crossing
completefinite timeline 到 terminal
cancel停止并保留最后提交视觉值
reset回到计划逻辑起点
revert恢复首次播放前捕获的 baseline
stretch保持 normalized progress 重映射 duration
refresh重做 target/unit/layout/baseline resolve
set_timeline运行时替换计划

cancelresetrevert 不是同义词。关闭临时交互通常 cancel;需要回到设计态用 revert;要重新从计划起点播放用 restart。

读取状态

snapshot 返回播放状态、时间、进度和 outcome;direction 返回当前方向;lowering_report 说明 backend 选择。

let snapshot = controls.snapshot();
if snapshot.state == PlaybackState::Paused {
    controls.resume();
}

普通帧不会触发 Dioxus 重渲染。只有调用 use_animation_snapshotsubscribe 的 scope 才接收响应式进度,避免 60fps 全树 render。

等待结束

let outcome = controls.finished().await;
match outcome {
    AnimationOutcome::Completed => {}
    AnimationOutcome::Cancelled => {}
    _ => {}
}

finished() 等待真实 terminal outcome。Presence 和业务流程应依赖它,不用 sleep(duration) 猜结束时间。

回调顺序

begin → before_update → sample/compose → update → adapter commit → render → loop → complete/cancel → settle。

callback 只做轻量状态派发;重 I/O 放到异步任务。频繁读取 snapshot 做日志也会影响帧时间,应在开发诊断后关闭。