C3.23.2Nested scroll handoff stutter设计研究
交棒时机不当会产生卡顿感
别名: 滚动卡顿 · 交棒延迟 · scroll hitch
概念解释
内层到头和外层接手前,如果中间空出若干帧没有人消化位移,或者两边同时消化同一段位移,用户会感到顿一下。卡顿不是帧率掉了,而是滚动链在边界上的时间缝:手指还在动,内容停了几拍,然后整页突然跟上。交棒“发生了”仍可能难用,问题在时机。
机制
理想情况是边界帧上余数无缝切换:内层增量变为零的同一帧,外层增量等于余数。常见缝隙来自:等抬手再把事件交给父视图;回弹动画先播完再 chaining;父子各用一套惯性计算器,交棒时初速不连续;或者为了防抖而插入死区,位移在死区被丢弃。反面是重叠:内层回弹还在播,外层已经开始移,同一 dy 被加两次,边界出现一次抽搐。速度不连续会被前庭–视觉系统读成撞击,比单纯换所有者更显眼。
怎么研究
录屏逐帧看边界附近的内容像素位移,画出手指速度与内容速度两条曲线。因变量:内容速度掉到零的持续帧数、交棒后速度阶跃、主观“卡住了”评分。自变量:是否等抬手、回弹是否参与、惯性是否传递。不要用平均帧率当指标——全程 60 fps 仍可在边界卡死。
边界
内层很短、几乎一碰就到头时,卡顿会被当成整个控件的迟滞。无动画的即时跳转(无惯性)对时机误差较不敏感。游戏或地图用自定义相机插值时,滚动链的帧对齐帮不上忙。卡顿感也不是方向锁的问题:纯纵向嵌套照样会缝。
怎么落地
- 在越界当帧把余数和外层初速写进去,不要等抬手或等回弹结束。
- 若必须回弹,只在用户明确顶住边界且不再向外推时播放,不要把回弹插在交棒前。
- 对着边界做慢推和快甩两种手势,逐帧核对内容速度有没有掉零;主观“顿一下”与掉零帧对齐,才算这条的缺陷。