执行alt-tab时,Alt键盘丢失

时间:2017-10-25 20:03:09

标签: javascript jquery

我正在使用以下代码检测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;
}

2 个答案:

答案 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则始终不会)。