三段长按与连击

0.65 / 1.2 / 1.9 秒
进度环以离散段点亮,核心从 idle 到 charge 再到 press。松手只产生一次主提交,之后才根据达到的阶段启动自动 burst。
状态机
text
IDLE
└─ down → HOLDING
├─ travel ≥ 12 px → CANCELLED(锁存)
├─ 0.65 s → STAGE 1
├─ 1.20 s → STAGE 2
├─ 1.90 s → STAGE 3
└─ up → one coreAction(chargeRatio) → optional BURST三档 burst
| 档位 | 总持续 | 节拍间隔 | 用途 |
|---|---|---|---|
| 1 | 1.8 s | 300 ms | 轻量自动连击 |
| 2 | 3.0 s | 220 ms | 中段收益与热量 |
| 3 | 4.5 s | 160 ms | 高强度爆发 |
调度器如果短暂卡顿,最多补一次丢失节拍,不能在恢复时瞬间补齐十几次点击。这样浏览器标签页抖动或 ESP32 一次长刷新都不会制造经济漏洞。
所有权
Canvas 长按、模拟器 HOLD 按钮和键盘 Space/Enter 共用同一交易令牌模型。同一物理动作不能同时触发原生 click 与自定义 release;pendingHoldClick 用于消费浏览器随后生成的 click。
取消条件
- 总位移达到 12 px。
- pointercancel / lostpointercapture。
- 切页、进入 ambient、发射、新启动/恢复出厂序列。
- 第一次唤醒输入:整次 down–move–up 都被消费,不在抬手时重新成为长按。
视觉与经济解耦
按住时的环、核心压缩和阶段提示只是预览。真正的 chargeRatio 在 release 以 elapsed 重新计算并钳制到 0–1,避免漏帧导致 UI 看见第三档、逻辑只算第二档。
