使用多个按键事件(Windows键)

时间:2013-05-17 06:29:27

标签: javascript jquery

在处理多个按键事件时,我发现这个代码很精简

$(document).bind('keypress', function(event) {
    if( event.which === 65 && event.shiftKey ) {
        alert('you pressed SHIFT+A');
    }
});

但是要使它与Windows密钥组合起来......就像

一样
event.which === 65 && event.windowsKey

它失败了......

是否有任何选项可以使其与Windows密钥一起使用?

如果它是一台mac机器,那么没有键作为windows ..那么什么可能是mac中windows键的备用选项

2 个答案:

答案 0 :(得分:2)

  1. 使用keyup活动。
  2. 在Mac上,左侧命令为which = 91,右侧命令为which = 93。我不知道Windows上有什么,但你可以自己测试一下。 正如@ian所评论的,它们应分别为91和92。
  3. 测试

    $(document).on('keyup', function(e) {
    
        var modKey = "";
        if (e.shiftKey) modKey += "shiftKey,";
        if (e.ctrlKey)  modKey += "ctrlKey,";
        if (e.altKey)   modKey += "altKey,";
        if (e.metaKey)  modKey += "metaKey,";
    
        console.log ("which: " + e.which + " modkey: " + modKey );
    });
    

    更新:尝试使用keydown事件和event.metaKey

    $(document).on('keydown', function(e) {
        if(e.which === 65 && event.metaKey ) {
            console.log ("You pressed Windows + A");
        }
    });
    

答案 1 :(得分:0)

记住你之前按过的键。就像你按下shift一样。在onKeyRelease上获取布尔值或shiftPressed = true的内容,使其再次为假。这样你就可以在做某事之前检查shiftPressed == true && aPressed == true是否

我刚才做了一些WASD游戏。如果您看到代码,也许更有意义:

var up = false;
var down = false;
var left = false;
var right = false;
function keyUp(e) {
    keyCode = (e.keyCode ? e.keyCode : e.which);

    if (keyCode == 37 || keyCode == 65) {
        left = false;
    }

    if (keyCode == 38 || keyCode == 87) {
        up = false;
    }

    if (keyCode == 39 || keyCode == 68) {
        right = false;
    }

    if (keyCode == 40 || keyCode == 83) {
        down = false;
    }

}

function forceStopMoving() {
    left = false;
    up = false;
    right = false;
    down = false;
}


function keyDown(e) {
    keyCode = (e.keyCode ? e.keyCode : e.which);
    if (keyCode == 37 || keyCode == 65) {
        left = true;
    }

    if (keyCode == 38 || keyCode == 87) {
        up = true;
    }

    if (keyCode == 39 || keyCode == 68) {
        right = true;
    }

    if (keyCode == 40 || keyCode == 83) {
        down = true;
    }
}