v0.3.2
修复:展开动画「字体鬼畜」(闪现 + 结尾硬切)
v0.3.1 的展开动画有两处时序缺陷叠加,表现为点击展开的一瞬间内容先以完整形态闪现一帧、被压没、空白长高 220ms 后文字又瞬间蹦出:
- 起点闪现:压 0/隐身约束写在 setTimeout 宏任务里,晚于首帧 paint。现改为 queueMicrotask 微任务首测——保证在官方父组件摘除 hidden 之后、浏览器 paint 之前完成「测高 → 压 0 → 启动 WAAPI」,内容从未以完整形态上屏。微任务不依赖 rAF,IAB 后台兼容性不变。
- 结尾硬切:展开方向 opacity 原为 0→0(无淡入)。现按方向拆开 keyframes,展开 0→1 平滑淡入,收起保持 1→0 淡出。
- 首测失败(内容异步物化)时立即预压 0 阻止后续帧闪现,回退轮询 + 解除约束测量,3 次失败照旧回退官方瞬间切换。
并发 review 修正
- 预压态测量同步解除 margin 约束(原动画终点 margin 被内联 0 污染,动画结束行距跳变)
- cancel 后旧微任务/轮询不得再预压(杜绝行永久隐身残留)
- reverse 返回「是否仍活跃」,调用方不再残留已完成的 handle(原可致折叠条点击永久失效)
- 浏览器外部取消动画时立即恢复布局(原最长隐身 720ms)
验证
- 40 个纯逻辑测试全绿(tsc strict / node:test)
- 复现页 A/B 逐帧实测:旧逻辑首开帧 0 闪现(FAIL)→ 新逻辑 37 帧采样 0 闪现、opacity 0→1 平滑(PASS)
- 真实宿主 0.1.2-alpha.1 装载验证通过(bundles 配置不变,升级仅替换 tgz)
安装:下载下方 tgz,按 README 更新 profile 的 file: 依赖后重启宿主即可(v0.3.1 → v0.3.2 无配置变更)。