0

在处理多个按键事件时,我发现这段代码可以正常工作

$(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 键的替代选项可能是什么

4

2 回答 2

2
  1. 使用keyup事件。
  2. 在 Mac 上,左命令是which = 91,右命令是which = 93。我不知道 Windows 上的那些是什么,但你可以自己测试一下。正如@ian 评论的那样,它们应该分别是 91 和 92。

去测试

$(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");
    }
});
于 2013-05-17T06:53:25.677 回答
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;
    }
}
于 2013-05-17T06:33:24.453 回答