折叠动画要有收起态过渡
现象与根因
- 症状:基础信息折叠后收起时无动画;自定义模块完全无动画(连展开也没有)。
- 根因:这些区块用的是
isOpen && <内容>。展开 = 元素插入 + 进入动画;收起 = 元素移除,没有"从 1 到 0"的过程可播。 - 自定义模块更彻底:它连展开动画都没有,等于整块没有折叠过渡。
做法
和其它 section 对齐,改成保持挂载 + 网格行高过渡:
grid-rows-[1fr] → grid-rows-[0fr] + opacity 过渡
这样收起时内容仍在 DOM 里,只是被行高与透明度渐变掉,进出都有动画。改完要补对应单测(basics-editor.test.tsx、custom-section-editor.test.tsx)并跑 tsc --noEmit。
判据
问一句就够了:「这个动画是在元素被插入/移除时播的,还是在一个持续存在的元素上过渡的?」 前者只能单向。
相关
- 进度条要由真实进度驱动 —— 同源:动画必须由真实状态驱动,不能靠"看起来像"
- 高频手势缩放不要走React状态 —— 同源:动画类效果要挑对承载方式
- 焦点环画在圆角外会露出四角 —— 同一天同一编辑器的另一处「通用样式没被单独覆盖」