F7.11.3Coalesce rapid motion triggers设计

连续快速操作触发的动效应合并或跳过而非排队播放

别名: 动效合并 · 动画队列 · 连点排队

概念解释

快速连点产生的八段位移如果排队逐段播放,人看到的是自己已经放弃的中间页在依次闪过。连续触发时,运动要合并到最新目标或跳过中间态,不能做先进先出的影院排片。队列把每一次历史意图都演一遍,和「当前意图进不来」不同:意图进来了,只是被排在旧动画后面。

机制

触发器每次都 play() 一条新动画,默认入队。连点 Tab、连按步进、连弹返回,队列长度等于多余的意图数。视觉上出现:已经要去第 5 项,却必须先看 2、3、4 的入场。目标在队列里移动,命中区跟着过时坐标跑,误点率上升。

合并的含义是:新触发到来时,正在播的那条以当前进度为起点,改插值到最新终点,中间那些过时终点永不绘制。跳过的含义是:直接切到最新终态。两者都丢掉历史意图的演出权。弹簧在这里特别糟,因为每条队列项还带着速度,合并会把相位叠乱——这也是为什么高频控件不该用过冲,但即使没有过冲,队列本身已经错了。

边界

  • 需要保留过程记录的场景(撤销栈可视化、时间线回放)例外,那些运动就是历史本身。
  • 两次触发间隔长于稳定时间,谈不上队列,按两次独立过渡处理。
  • 合并到最新仍要落在合法状态,不能把两个终态的字段混成第三份数据。

怎么落地

  • 对同一属性、同一对象的新触发,取消未完成的动画并改向最新终点,或直接 finish() 到最新。
  • 不要用全局动画队列承载导航;导航只保留当前目标路由。
  • 验证:连点 8 次步进或 8 个 Tab。若屏幕依次走过中间 6 个,就是在排片;应只看到最后一次的落点。

延伸

  • 同组F7.11.1 用户的下一步操作不应被等待未完成的动效阻塞 · F7.11.2 可打断的动效需要在中断点仍呈现合理的中间状态 · F7.11.4 不可打断的强制动效会在高频操作场景中被感知为拖慢
  • 相邻F7.03.3 弹性曲线不适合频繁触发的动效 · F7.10.1 动效叠加会延长总等待时间
  • 站内检索coalesce animations · animation queue · latest-wins

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/F7.11.3