A8.15.4Tolerance radius for hover and dwell interactions设计
悬停与停留类交互必须设定容差半径
别名: 容差半径 · 停留触发 · dwell tolerance · hover tolerance
概念解释
依赖用户「把光标/指尖停在某处一段时间」来触发的交互——悬停展开菜单、停留确认、拖拽长按——如果判定标准是位置必须完全不变,就必然会因为生理性震颤而误判为用户中途移动了。可行的做法是给停留判定设定一个容差半径(tolerance radius):只要位置停留在这个半径范围内,就算作没有移动,超出半径才判定为移开。
机制
生理性震颤保证了任何人都无法把指尖或光标钉在单一像素点上不动,停留时的实际轨迹永远是以目标点为中心的一小片散布区域,而不是一个点。如果悬停判定逻辑要求逐帧位置完全一致(或差值小于设备的最小分辨单位),这片天然存在的散布就会被系统读成一次次的「移动」,导致停留计时反复被重置,用户明明在耐心等待却始终触发不了。容差半径的本质是承认这片散布区域的存在,把判定粒度从「像素级不动」放宽到「停留在一个合理范围内」。
边界
容差半径的合适取值不是固定常数,需要结合具体设备的震颤幅度(不同输入方式、不同姿势下幅度不同)来定,半径过小起不到缓解作用,过大则会让悬停判定对真实的移开意图不敏感,用户想取消却因为还在半径内而继续被判定为停留。
怎么落地
- 为悬停/停留类交互设置一个基于实测散布范围而不是随意猜测的容差半径,半径至少要覆盖静止悬停状态下的常见散布范围。
- 容差半径不必是固定值:可以按输入设备类型(触屏手指、触控笔、鼠标、隔空手势)分别设定,因为不同设备承载的震颤幅度差异很大。
- 验证办法:采集目标用户群体在该设备上尽力保持静止悬停的真实轨迹数据,取其散布范围的某个分位数(比如95%轨迹点落入的半径)作为容差下限,再据此调参,而不是先设一个数值再凭感觉调整。