C1.11.4Scroll hijacking设计

滚动劫持破坏用户对滚动的控制预期

别名: 滚动劫持 · scroll-jacking · scroll control

概念解释

滚动劫持(scroll hijacking)是页面或应用拦截用户的滚轮、触控板或触摸滚动输入,改为驱动自定义动画、分屏跳转、横向移动或固定节奏的叙事。它破坏控制预期,是因为用户输入的方向、距离、速度和停止意图不再直接决定内容位置。

机制

原生滚动通常把输入增量映射到可中断的内容位移。劫持层重新解释事件并施加自己的阈值、缓动、分页或动画时长;响应可能滞后、吞掉反向输入或在用户停止后继续运动。用户无法用已学会的滚动动作预测结果,只能等待系统完成它的叙事。

劫持之所以让人感到失控,根源在于它把一个连续的、可随时中断的输入通道,改造成了一个离散的、有最短执行时长的状态机——每次滚动触发的不是"位移了多少",而是"进入下一个预设片段",而这个片段一旦开始播放,往往要等动画完全结束才响应下一次输入。这和原生滚动的根本差异在于:原生滚动里,停止输入等于立刻停止运动(或按惯性自然衰减),而劫持后的滚动即使用户已经松手甚至反向滚动,画面仍可能继续播完当前片段——用户的"停"这个动作在系统里被丢弃了,这才是控制感消失的具体机制,而不只是"动画比较长"这么简单。

边界

受控滚动在少量明确场景可有意义,例如幻灯片模式、时间轴缩放或沉浸式展示,但必须有明确进入方式、即时退出和原生替代。并非所有自定义视觉效果都是劫持:关键判断是用户是否仍能连续、可逆且可中断地控制位置——如果反向滚动能立刻反转动画方向、停止输入能立刻停止运动,即使视觉效果是自定义的,也不构成这里说的劫持。

怎么落地

  • 默认保留原生滚动的方向、距离和中断能力,避免用滚动触发强制分页或长动画;任何自定义滚动响应都应该让"停止输入"在下一帧内就体现为停止运动。
  • 若提供专门模式,清楚显示模式状态并允许键盘、触控和辅助技术走常规导航。
  • 验证办法:测试快速反向、停下、嵌套容器和缩放环境,检查是否有输入被吞掉或无法恢复位置;具体录制"松手到画面真正停止"之间的延迟,超过一到两帧就应视为劫持而非流畅动画。

延伸

  • 同组C1.11.1 离散步进滚动与像素级平滑滚动 · C1.11.2 惯性滚动的摩擦与终止预期 · C1.11.3 异步加载导致的滚动位置跳动与锚定
  • 相邻I1 状态时间与响应 · G1 导航与信息架构
  • 站内检索scroll hijacking · scroll-jacking · interruptibility

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C1.11.4