C2.22.2touch debounce interval设计研究

系统需要在响应速度与防抖之间设置最小重复触发间隔

别名: 防抖间隔 · 最小重复间隔 · debounce

概念解释

防抖不是把按钮变慢,而是给同一目标设一个最小重复触发间隔:第一次提交之后,短于该间隔的后续命中被丢掉或合并。间隔太短,弹跳穿过去;间隔太长,下一次有意点按要等。这个数是响应速度和伪影抑制之间的显式权衡,必须按控件风险来选,不能全应用一个魔法毫秒。

机制

弹跳的间隔分布集中在很短的一端,有意第二次点按的分布中心更靠后,两条分布有重叠。间隔门闩是在重叠区里切一刀:切得靠左,漏过弹跳;切得靠右,误杀快手。支付、发送的代价不对称——多触发一次比晚几十毫秒更糟,门闩可以偏右。键盘删除键、游戏开火的代价相反。门闩可以挂在 end 上(更贴近“触发”),也可以挂在 begin 上(能挡住还没抬起的二次按下)。触感反馈若在第一次按下就打,被丢掉的第二次不应再打,否则用户会以为第二次被接受了。跨控件的全局间隔会把用户点 A 再点 B 也挡住,所以间隔必须带目标身份,最好再带位置半径。

怎么研究

画弹跳间隔直方图和有意连点间隔直方图,找可接受的漏过率和误杀率对应的切点。自变量是控件类型(提交 / 开关 / 按键)、是否有触感、以及门闩挂在 begin 还是 end。因变量是剩余弹跳率、有意第二次被丢的比例、以及主观“按钮钝了”。把青年快手和老年慢手分开拟合,一个切点很难同时服务两端。不要只用实验室里“请尽快连点”的任务去定提交按钮的间隔,那会把切点推到弹跳区里面。

边界

无障碍开关的扫描输入、外接键盘的按键重复,有自己的时间尺度,套触摸弹跳间隔会把正当重复吃掉。网络按钮的防重应做在事务层(幂等 token),只靠前端间隔挡不住双端重复提交。动画很慢的按钮如果把间隔设成等动画播完,用户感知的不是防抖而是卡顿。不同 DPI 或刷新率不改变弹跳的物理时间,把间隔写成帧数会在 60 Hz 和 120 Hz 之间偷偷变时长。

怎么落地

  • 按风险分档写间隔:支付/发送偏长,列表项点选偏短,并在代码里和目标 id 绑定,而不是全局锁。
  • 被门闩丢掉的第二次不要再给触感和按压动画,避免“看起来点到了、业务没走”。
  • 用线上间隔直方图回看切点:弹跳峰若仍大量穿过,把门闩右移几个毫秒;有意连点若大量堆在门闩右侧被杀,就按控件类型拆开,而不是整站加长。

延伸

  • 同组C2.22.1 连击指同一目标短时间内被多次触发,可能来自手指弹跳而非用户意图 · C2.22.3 防抖间隔过长会让用户故意的快速多次点击(如游戏)失效 · C2.22.4 物理按键的机械回弹同样会产生连击,需要软件消抖
  • 相邻C3.01 轻点 · C3.25 长按时长阈值与替代
  • 站内检索debounce · refractory period · repeat interval

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/C2.22.2