SC 2.5.2 级别 A WCAG 2.1
指针取消
由单一指针触发的功能必须在抬起事件而非按下事件时触发,以便用户能够拖离目标来中止操作。除非即时激活是必要的,否则必须提供中止、撤销或预激活取消机制。
要求内容
当用户开始点击或单击后发现目标有误,应能够在抬起手指或释放鼠标之前滑离目标,使操作不被触发。这意味着激活必须发生在 pointerup / click 事件上——即浏览器的标准行为——而非 pointerdown / mousedown 事件上。
此成功准则要求满足以下四项保证之一:
- 按下事件不触发该功能;或
- 在同一目标上的抬起事件时完成激活,用户可通过滑离目标来中止;或
- 激活后提供”撤销”功能;或
- 功能的逆向操作可还原其结果(切换开关)。
必要性激活——例如音乐应用中钢琴键的按下动作——不在此限。
如何达到要求
- 使用
click监听器,而非mousedown/touchstart。浏览器已内置正确的拖离取消行为。 - 对于手动处理指针事件的自定义组件,在
pointerup时触发操作,并检查目标是否仍为光标下的同一元素。 - 对于破坏性操作(删除、发送),配合确认步骤或”撤销”提示。
- 对于切换按钮(静音、收藏、已按下状态),再次点击可还原更改,同样满足此成功准则。
常见失败情形
- 按钮绑定了
onmousedown事件,指针按下时立即触发,拖离无效。 - 自定义拖动手柄将
pointerdown解读为”选择”事件。 - 仿原生感的卡片在
touchstart时跳转至详情页——用户无法在不意外触发的情况下滑动经过。 - 下拉菜单在点击外部区域时通过
mousedown关闭,而非通过click,导致该次点击被吞掉。
重要性
拖离取消是手部震颤、运动障碍或指向不精准(例如在颠簸列车上使用触控笔)的用户在误触后的恢复手段。在按下事件时触发操作,等于移除了这道安全阀——手指一触及目标,操作即告完成。这对所有用户同样是可用性负担:即便是非残障用户,也常常依赖拖离功能来纠正误触。