缺失按下态会导致重复点击
别名: 无按压反馈 · 连点 · duplicate click
概念解释
按下态(pressed / active state)是手指或指针还按着时,按钮给出的「接触已被接住」的证据。它不报告任务做完了,只报告这一次按被采样了。缺了它,用户在抬手之前没有任何属于这次动作的回执,最常见的补偿是再点一次。重复点击在这里不是性急,而是因果链在触发器上断开之后的合理补救。
机制
人对「我按了所以它应立刻有反应」的时间窗很短。按下态卡在接触开始到抬起之间,正好填进这个窗:位移、变暗、涟漪都把动作和控件暂时焊在一起。若从接触到下一帧外观仍是默认态,感知系统会把这次接触判成未命中——尤其在触摸上,手指挡住了控件,连那一帧的微小变化也看不见。未命中的补救是第二次按。网络再慢一点,第二次按会在第一次请求尚未上锁之前发出,于是重复提交、重复下单、重复发送。按下态防的是「还没等到加载态就再点」这一段空窗;加载锁防的是另一段。两段都可以制造连点,但缺口不同。
怎么研究
在同一次点击任务里操纵按下态:有 / 无,以及按下态是否被手指模型遮住。记录从第一次接触到第二次接触的间隔,以及是否发出两次请求。
自变量:按下态有无、按下态出现延迟、目标是否被遮挡、后续加载态出现的时间。 因变量:二次点击率、两次点击间隔、误以为未点中的口头报告。
把按下态延迟到抬起之后再出现,等于没有按下态——它已经变成了结果反馈。实验必须把「按住期间的变化」和「抬起后的变化」分开计时。触屏应用指尖遮挡层,鼠标则不必。
边界
机械键盘和实体按钮自带行程与触觉,屏幕按下态的缺失可以被硬件回执补上;虚拟键盘和纯触屏没有这条退路。游戏里的连发是功能,不是缺陷,应按住重复触发来设计,并显式显示连发。若系统在 pointerdown 就发出请求,没有按下态仍可能只发一次——但用户不知道,仍会再点,于是问题从「双请求」变成「双请求加用户困惑」。无障碍开关设备用停留来激活,没有「按下期间」,需要另一套进行中指示,不能照搬按下态。
怎么落地
- 在 pointerdown / touchstart 立刻切换按下外观,不要等鼠标抬起或等服务器。
- 触摸上让按下变化出现在指尖遮挡范围之外(外扩高亮、按钮整体下移),避免变化发生在看不见的地方。
- 不要用加载态顶替按下态:加载可以晚几十到几百毫秒,按下必须在接触当帧。
- 验证:在真机上对提交按钮连拍接触,看请求日志。若第一次接触后外观未变且短间隔内出现第二次请求,就是缺按下态在制造连点。