-
feat(web): 人群移交的数据流动画 —— 格子 → 助手 → 开大窗 · 08a4b565
点中矩阵某一格后:一串粒子沿弧线飞向助手 → 助手进「吸收」姿态 → 落地后自动 开会话窗(最大化)并说出那句话,接上原有流程。 沿用本仓既有取舍(不引动画库):CSS Motion Path(offset-path)+ 原生 keyframes, 曲线一次算好塞进 --pac-stream-path,粒子只改 offset-distance —— 位置由合成器算, 不占主线程,与宠物那 31 个 keyframes 同一套路。
⭐ **两个端点都在播放那一刻现取**,这是"位置要准"的关键: · 起点 = 事件带来的格子矩形 —— 浮层紧接着就关,不当场取就没了; · 终点 = 助手 FAB 的**实时** rect(挂 data-assistant-fab 现查)—— 那颗钮可被主管拖到任意角落并记进 localStorage,写死右下角的话, 拖过钮的人看到的就是粒子飞向空气。 弧线的控制点取中点沿法线抬起,抬的方向跟着走向翻转,否则从左上飞和从右下飞 会一个上凸一个下凹,看着像两套动画。 分层没有破:业务只发语义事件(cohort_handoff + from),**不描述怎么飞**; 飞法/粒子数/时长全在舞台层 cohort-stream。换成传送带只改那一个文件。⚠ ️ 时长的真理源在舞台层,store 引它来排"飞完再开窗" —— 业务侧自己 setTimeout 的话,每个调用点都要知道动画多长,改一次要满仓找。 反过来也不让舞台层去开助手:那会让"怎么演"决定"接下来做什么"。 顺带把 maximized 从 AssistantWidget 的组件内 useState 提到 store —— 与 open 当初同一个毛病:业务侧要"移交后直接开大窗"就够不着。 无障碍:prefers-reduced-motion: reduce 时粒子整段不出现,移交本身照常发生。 浏览器实测:一次点击产生 10 颗粒子,offset-path 起点 = 格心(312,180)、 终点 = FAB 中心(1236,676) 精确吻合,0.62s/颗、45ms 间隔; 落地后助手自动最大化并发出「帮我给「种植·黄金期」这批患者出一份分配方案」, 确认单渲染出「确认分配 43 条」与该格数字一致。 next build 通过,971 tests passing,控制台零报错。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>luoqi committed
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| (app) | Loading commit data... | |
| pet-lab | Loading commit data... | |
| globals.css | Loading commit data... | |
| layout.tsx | Loading commit data... |