JianFeeeee
eeecaad79e
鸿蒙|日历翻月滑动动画修好(.transition 不播 → 显式属性驱动)
用户:「日历页面还是没有左右滑动动画」。
## 实测定位(不是推理)
把动画时长临时放大到 5s + Linear(确保抓得到中间帧),点「‹」后连拍,
逐偏移互相关算位移:
最佳 dx = 0 ROI 平均差 0.00
只留 `translate`、去掉 `opacity` 后直拍三帧:帧1 与帧3 **逐像素相同**。
⇒ 一点横向位移都没产生。
## 根因
`.transition()` 只在组件**挂载/卸载**(`if` 条件切换)时触发。
而翻月只改 `year`/`month`,网格 `Column` **一直存在** ⇒ 过渡永远不触发。
代码里那句注释("键带 monthKey() 前缀 ⇒ 节点重建 ⇒ 过渡必播")说的是
`ForEach` 的**子项**键 —— 外层容器并不会因此重挂。这是我当初写错的假设。
## 修法:改用本仓已验证可播的那套
`MainPage` 的日历窗格入场(`calPaneIn`)用的是
① `@State` 数值;② 显式 `.translate()`/`.opacity()`;③ `animateTo` 同改。
这里照它做(`slideInPct` / `slideInOpacity`),并与 WebUI `cal-in-next/prev`
逐字同源:**12% + 淡入**、方向由 `forward` 决定。
顺序纪律(与 `calPaneIn` 同):**起点值写在 animateTo 外面**,
写进闭包会让渲染层只看见最终值 ⇒ 退化成瞬移。
修复后复验(同一次 5s 放大连拍):
帧序列 = 旧月静止 → **横向位移 100px** → 新月静止 ✅
## 判据
`animation-audit` 的 `cal-in-*` 条目从"`Theme.calendarSlide` 有调用点"
改为"页面里有 `slideInPct`/`slideInOpacity` 驱动 + `.translate` 接线"。
★ 删掉死方法 `Theme.calendarSlide`(它已无调用点 —— 判据当场抓到,
这正是"必须盯调用点"那条纪律的价值)。
变异(两条都能红):
· 删掉 `.translate({x: this.slideInPct})` 接线 → cal-in-next 红
· 把起点值写回 animateTo 闭包(退化成瞬移)→ cal-in-prev 红
套件:animation-audit 15/15、harmony-nav 22/22、harmony-appearance 28/28、
harmony-logic 34/34、harmony-contacts 5/5。
2026-09-24 13:56:52 +08:00
..
2026-09-14 15:41:52 +08:00
2026-09-15 12:09:37 +08:00
2026-09-19 23:38:35 +08:00
2026-09-15 07:46:54 +08:00
2026-09-24 10:10:32 +08:00
2026-09-14 16:21:27 +08:00
2026-09-15 11:17:23 +08:00
2026-09-24 13:56:52 +08:00
2026-09-19 15:03:40 +08:00
2026-09-24 10:10:32 +08:00
2026-09-14 17:33:05 +08:00
2026-09-15 12:55:25 +08:00
2026-09-20 05:22:42 +08:00
2026-09-20 05:45:42 +08:00
2026-09-20 10:51:28 +08:00
2026-09-24 10:10:32 +08:00
2026-09-24 10:10:32 +08:00
2026-09-19 19:29:49 +08:00
2026-09-24 10:10:32 +08:00
2026-09-24 10:10:32 +08:00
2026-09-21 17:36:40 +08:00
2026-09-24 13:13:46 +08:00
2026-09-24 10:10:32 +08:00
2026-09-20 22:35:35 +08:00
2026-09-24 10:10:32 +08:00
2026-09-18 08:39:21 +08:00
2026-09-19 16:18:10 +08:00
2026-09-24 10:10:32 +08:00
2026-09-24 10:10:32 +08:00
2026-09-15 12:06:15 +08:00
2026-09-16 08:29:24 +08:00
2026-09-17 19:38:15 +08:00
2026-09-17 18:43:00 +08:00
2026-09-14 16:21:27 +08:00
2026-09-21 13:29:24 +08:00
2026-09-18 10:34:00 +08:00
2026-09-14 15:11:47 +08:00
2026-09-15 08:45:54 +08:00
2026-09-15 07:46:54 +08:00
2026-09-14 17:33:05 +08:00
2026-09-24 10:10:32 +08:00
2026-09-18 01:08:04 +08:00