使清理操作具备幂等性
当 pointerdown 开始拖动时,存储当前的 pointerId,以及与之关联的对象或操作。pointerup 和 pointercancel 都应该结束该交互并清除其状态。让清理函数可以安全地重复调用,即使该操作此前已经结束也不会产生问题;这简化了处理捕获丢失、窗口变化和重复防御清理的过程。
如果使用指针捕获,请侦听lostpointercapture,将其作为交互不再拥有指针的另一个信号。除非游戏明确定义了该结果,否则请勿将取消视为成功放置。取消的拖动可能会将对象返回到其起始位置、保留最后的有效位置或取消移动;选择一项规则并通过视觉反馈告知玩家。
测试浏览器手势接管
尝试从游戏表面开始并继续向屏幕边缘拖动、从表面开始垂直页面滚动、按住期间旋转以及第二根手指触摸其他地方。确认取消后没有角色继续移动并且没有按钮在视觉上保持按下状态。
touch-action 属性影响浏览器处理的手势。 MDN 解释说,浏览器在接管平移或缩放时可以派发 pointercancel。将取消视为交互模型必须处理的正常结果。
关于游戏中的指针取消的常见问题
Pointercancel 是指针向上失败吗?
这是一个单独的信号,表明指针将不再继续当前的交互。运行清理并应用游戏的取消规则,而不是假设操作已完成。
触摸操作可以防止每次指针取消吗?
不会。它指导浏览器处理触摸手势,但其他条件仍然可以结束指针传递。即使游戏表面具有自定义手势规则,也保持取消处理。
延伸阅读
发现信息过时了? 报告需要更正的内容