我正在使用以下代码检测alt。它可以工作,但是当我 alt - tab 切换到另一个程序时,我得到一个18(alt)的keydown而没有keyup,而且 alt 仍然紧迫。我该如何解决这个问题?
var altPressed = false;
$(document).keydown(function(evt) {
console.log("keydown", evt.which);
switch (evt.which) {
case 18:
altPressed = true;
break;
}
}).keyup(function(evt) {
console.log("keyup", evt.which);
switch (evt.which) {
case 18:
altPressed = false;
break;
}
答案 0 :(得分:0)
Alt + Tab 会将焦点移到主窗口上,因此 <html>
<head>
<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v" />
<style>v\: * { behavior:url(#default#VML); display:inline-block }</style>
</head>
<body>
<v:oval style="width:100pt;height:50pt" fillcolor="red">
</v:oval>
</body>
</html>
事件将不会触发。
这是您可以使用的可能解决方案。我不确定是否正在从oval
注册转义符,可能不得不改用keyup
。
示例:
which
答案 1 :(得分:0)
@Nathan正确指出: Alt + Tab 会将焦点移到主窗口上,因此不会触发keyup事件。
这是不需要jQuery 的解决方案,适用于每种焦点丢失:
这是使用您的代码的VanillaJS示例,请在MDN文档中阅读有关模糊事件的更多信息
let altPressed = false;
function keyDownHandler(evt) {
if(evt.key === "Alt")
altPressed = true
}
function keyUpHandler(evt) {
if(evt.key === "Alt")
altPressed = false
}
document.addEventListener('keydown', keyDownHandler)
document.addEventListener('keyup', keyUpHandler)
window.addEventListener('blur', keyUpHandler)
注意:与@Nathans答案相同,这将不知道在移回页面时键是否仍在向下(但使用alt + tab则始终不会)。