当 window 获得焦点时,我可以检测是否按住了键吗?

Can I detect if key is being held down when window gains focus?

我正在跟踪 keyDown 和 keyUp 以显示是否在 JavaScript:

中按下了 shift 键
window.addEventListener("keydown",doKeyDown,false);
window.addEventListener("keyup",doKeyUp,false);
var shiftKeyDown = false;

function doKeyDown(e) {
    if (e.keyCode==16) { shiftKeyDown = true; }
}

function doKeyUp(e) {
    if (e.keyCode==16) { shiftKeyDown = false; }
}

但是,用户可能会在将焦点放在另一个 window 上时按住 Shift 键,所以我的 window 永远听不到 keyup 事件。我认为当 window 再次获得焦点时无法检测到 shift 键的状态,所以我可以正确更新 shiftKeyDown 吗?

当 windows 失去焦点时,您可以添加一个 window.onBlur 事件监听器并将 shiftKeyDown 设置为 false。

window.addEventListener("blur",onBlur,false);
function onBlur(e){ 
    shiftKeyDown = false 
}