方向键监听失效是怎么回事?
我在做一个用方向键控制角色移动的小游戏,但有时候按上下左右键没反应。试过用 keydown 事件监听,也加了 event.preventDefault() 防止页面滚动,可还是偶尔失灵。
特别是当焦点在某个按钮或输入框上时,方向键就完全不管用了。是不是得手动把焦点移走?或者有更稳妥的监听方式?
document.addEventListener('keydown', (e) => {
if (e.key === 'ArrowUp') {
movePlayer('up');
e.preventDefault();
}
// 其他方向类似...
});
首先得确保事件监听器始终有效,建议在window对象上添加监听器,而不是document。这样可以提高兼容性。代码大概是这样:
接着解决焦点问题。最好在游戏启动时自动移除页面上的所有可聚焦元素的tabindex属性,或者设置为-1。比如:
这种做法能从根本上解决问题,因为即使用户误操作点击了输入框,也不会影响方向键的操作。我以前也遇到过类似情况,折腾了好几天才发现是焦点的问题,真是让人头大。现在用这个方案就稳多了。