标准 · WCAG 2.2

SC 2.5.2 级别 A WCAG 2.1

指针取消

由单一指针触发的功能必须在抬起事件而非按下事件时触发,以便用户能够拖离目标来中止操作。除非即时激活是必要的,否则必须提供中止、撤销或预激活取消机制。

要求内容

当用户开始点击或单击后发现目标有误,应能够在抬起手指或释放鼠标之前滑离目标,使操作不被触发。这意味着激活必须发生在 pointerup / click 事件上——即浏览器的标准行为——而非 pointerdown / mousedown 事件上。

此成功准则要求满足以下四项保证之一:

  • 按下事件不触发该功能;或
  • 在同一目标上的抬起事件时完成激活,用户可通过滑离目标来中止;或
  • 激活后提供”撤销”功能;或
  • 功能的逆向操作可还原其结果(切换开关)。

必要性激活——例如音乐应用中钢琴键的按下动作——不在此限。

如何达到要求

  • 使用 click 监听器,而非 mousedown / touchstart。浏览器已内置正确的拖离取消行为。
  • 对于手动处理指针事件的自定义组件,在 pointerup 时触发操作,并检查目标是否仍为光标下的同一元素。
  • 对于破坏性操作(删除、发送),配合确认步骤或”撤销”提示。
  • 对于切换按钮(静音、收藏、已按下状态),再次点击可还原更改,同样满足此成功准则。

常见失败情形

  • 按钮绑定了 onmousedown 事件,指针按下时立即触发,拖离无效。
  • 自定义拖动手柄将 pointerdown 解读为”选择”事件。
  • 仿原生感的卡片在 touchstart 时跳转至详情页——用户无法在不意外触发的情况下滑动经过。
  • 下拉菜单在点击外部区域时通过 mousedown 关闭,而非通过 click,导致该次点击被吞掉。

重要性

拖离取消是手部震颤、运动障碍或指向不精准(例如在颠簸列车上使用触控笔)的用户在误触后的恢复手段。在按下事件时触发操作,等于移除了这道安全阀——手指一触及目标,操作即告完成。这对所有用户同样是可用性负担:即便是非残障用户,也常常依赖拖离功能来纠正误触。