C3.23.2Nested scroll handoff stutter设计研究

交棒时机不当会产生卡顿感

别名: 滚动卡顿 · 交棒延迟 · scroll hitch

概念解释

内层到头和外层接手前,如果中间空出若干帧没有人消化位移,或者两边同时消化同一段位移,用户会感到顿一下。卡顿不是帧率掉了,而是滚动链在边界上的时间缝:手指还在动,内容停了几拍,然后整页突然跟上。交棒“发生了”仍可能难用,问题在时机。

机制

理想情况是边界帧上余数无缝切换:内层增量变为零的同一帧,外层增量等于余数。常见缝隙来自:等抬手再把事件交给父视图;回弹动画先播完再 chaining;父子各用一套惯性计算器,交棒时初速不连续;或者为了防抖而插入死区,位移在死区被丢弃。反面是重叠:内层回弹还在播,外层已经开始移,同一 dy 被加两次,边界出现一次抽搐。速度不连续会被前庭–视觉系统读成撞击,比单纯换所有者更显眼。

怎么研究

录屏逐帧看边界附近的内容像素位移,画出手指速度与内容速度两条曲线。因变量:内容速度掉到零的持续帧数、交棒后速度阶跃、主观“卡住了”评分。自变量:是否等抬手、回弹是否参与、惯性是否传递。不要用平均帧率当指标——全程 60 fps 仍可在边界卡死。

边界

内层很短、几乎一碰就到头时,卡顿会被当成整个控件的迟滞。无动画的即时跳转(无惯性)对时机误差较不敏感。游戏或地图用自定义相机插值时,滚动链的帧对齐帮不上忙。卡顿感也不是方向锁的问题:纯纵向嵌套照样会缝。

怎么落地

  • 在越界当帧把余数和外层初速写进去,不要等抬手或等回弹结束。
  • 若必须回弹,只在用户明确顶住边界且不再向外推时播放,不要把回弹插在交棒前。
  • 对着边界做慢推和快甩两种手势,逐帧核对内容速度有没有掉零;主观“顿一下”与掉零帧对齐,才算这条的缺陷。

延伸

  • 同组C3.23.1 内层滚动到边界后交棒给外层 · C3.23.3 横向滚动区嵌在纵向列表中的方向判别
  • 相邻C3.06 快滑与惯性 · C3.19 手势冲突与消歧
  • 站内检索scroll hitch · handoff latency · velocity continuity

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C3.23.2