J3.13.1activation on up-event设计研究

关键操作应在释放而非按下时触发,以便用户中途取消

别名: 抬起触发 · 按下取消 · pointer cancellation

概念解释

指针在目标上按下时还没有承诺;抬起(up-event)时如果仍在目标内,才执行。按下之后可以把指针滑出热区再松开,动作作废。这叫用释放来触发,好让人中途取消。按下当下就开火,滑走来不及,一次落点错误直接变成命令。

机制

一次点击在时间上拆成 down 和 up。把执行绑在 down,取消窗口是零:接触的瞬间状态已经变了。绑在 up,down 和 up 之间的位移是一条逃生通道——热区外抬起 = 没有激活。运动不稳定的人常常在按下之后才发现落点偏了,逃生通道用的是已经发生的接触,不要求重新瞄准第二次。

这条防护管的是「对着目标按下、但决定放弃」的那一次。它不管手指本意是滚动、途经按钮;也不管误触发之后要怎么收回已经提交的结果。按下触发把取消从动作里删掉,只留下事后补救。

怎么研究

在可点控件上记录 pointerdown / pointerup / click 发生时控件是否仍命中测试、以及 down 与 up 之间是否离开过热区。比较「down 执行」和「up 执行」两种实现里,滑出取消的成功率。

自变量:执行绑在哪一事件、热区与视觉是否一致、滑出后是否仍监听。 因变量:滑出后仍被激活的比例、取消意图被尊重的比例。

用真实手指或指针,不要只用合成 click():很多自定义控件把逻辑挂在 mousedown,测试脚本点 click 会漏。

边界

需要按住才成立的交互(钢琴键、对讲、游戏开火)本来就是 down 开始、up 结束,取消模型不同,不要改成「抬起才出声」。拖动手势的 down 是拖的起点,不是提交。键盘激活通常在 keyup 或 click 合成,和指针的 down/up 不是同一条时间线。极短的点按里 down 与 up 几乎重合,取消窗口小,但仍应存在:只要滑出就不该执行。

怎么落地

  • 按钮、链接、提交的副作用放在 pointerup 或 click(浏览器默认的抬起合成),不要写在 pointerdown / touchstart。
  • 抬起时做命中测试:已经离开热区就不要执行;视觉按下态在滑出时要取消,给人「已经放弃」的反馈。
  • 验证:在按钮上按下,滑到按钮外再松开。任何已经提交、已经展开、已经播放的结果,都说明绑在了按下。

延伸

  • 同组J3.13.2 滚动或拖动手势途中经过的按钮不应被误判为点击 · J3.13.3 双击、长按等复合手势对运动控制受限用户成功率更低 · J3.13.4 误触后应提供轻松撤销而非要求重新执行完整流程
  • 相邻J3.09 防误触与可撤销 · A11.03.7 手部震颤与点击防抖、误触过滤
  • 站内检索pointer cancellation · up-event · activation on release

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/J3.13.1