明确手势与浏览器的边界
如果鼠标、触控笔和触摸适合共用一套输入流程,就使用 Pointer Events。从 pointerdown 开始追踪当前指针,直到移动和释放;除非设计明确支持多点触控,否则忽略其他指针。在游戏区域设置 touch-action,保留玩家仍需要的浏览器滚动或捏合缩放。对整个区域设置 touch-action: none 可能会禁用浏览器缩放。
对于拖动操作,立即显示对象已被抓取,并根据指针位置更新对象。对于点按操作,决定轻微移动是否会取消触发,并在真实触屏设备上测试这个阈值。将手势规则限制在游戏区域内,不要应用到整个页面。
把取消视为正常结果
当浏览器接管手势、设备状态发生变化或交互因其他原因中止时,指针可能会被取消。收到 pointercancel 时,应像正常释放后一样清除游戏的按下状态;否则角色可能继续移动,按钮也可能看起来一直处于按下状态。如果游戏捕获了指针,请在清理时释放捕获。
测试点按、缓慢拖动、从屏幕边缘开始的手势,以及尝试滚动页面的情况。确认每种操作都有明确反馈,离开游戏区域后也不会让控件卡住。MDN 的 Pointer Events 指南介绍了通用指针模型和 touch-action 的行为。
关于网页游戏触控操作的常见问题
游戏应该禁用浏览器的所有触控手势吗?
只有当游戏区域确实需要接管这些手势时才这样做。尽可能保留浏览器滚动或缩放,并只在需要控制交互的区域设置 touch-action 规则。
pointercancel 后应该怎么处理?
结束正在进行的游戏操作,并清除按下或拖动状态。取消是预期中的输入结果,因此清理过程应与处理 pointerup 一样周全。
延伸阅读
发现信息过时了? 报告需要更正的内容