API 参考:钩子
三个可挂的回调与信号。它们都挂在调用上而不是对象上:没有「订阅某个对象」的 API,过程信息只能通过这些参数递进来。
环境级的就绪状态(能力 / 运行时 / KaTeX / 取包)不挂在调用上,见环境状态。
onLoading(names)
按 import 取第三方包时的进展回调。三个挂载点,优先级从低到高:
createManimRenderer({ onLoading })createSurface(container, { onLoading })run(code, { onLoading })
ts
onLoading?: (names: string[]) => void参数 names:正在取的包名;取完再回调一次,给空数组。
例子
ts
const surface = await renderer.createSurface(container, {
onLoading: (names) => {
if (names.length === 0) return hideLoading()
// 随包件与缓存命中都很快,立刻显示会闪一下:延迟约 300 ms 再显示
window.setTimeout(() => showLoading(names), 300)
},
})注意
- 只覆盖取包,不覆盖渲染进度。「正在渲染」要自己在调用
run()前后记。 - 用户代码的
print不走这里,核心把它写到console.info。
onProgress(note)
导出过程的阶段播报,挂在 exporter.run() 的请求里。
ts
onProgress?: (note: string) => void参数 note:一句进展文字,如「正在从头真播并录制…」「录完 32 KB」。
例子
ts
await exporter.run({ python, controller, onProgress: (note) => setStatus(note) })signal
取消一次导出。只有 exporter.run() 接受,surface.run() 不接受。
ts
run(request: ExportRequest, signal?: AbortSignal): Promise<ExportResult>例子
ts
const abort = new AbortController()
stopButton.onclick = () => abort.abort()
await exporter.run({ python, controller }, abort.signal)abort 之后导出中止,返回 { ok: false, reason: 'error', error: '已取消' }。
注意
- 它取消的是导出这一次动作,不是正在跑的渲染。取消「正在跑的那段代码」在当前版本没有对应能力,见低层导出末尾的缺口表。