3

我正在为我正在尝试编写的这个用户脚本的语法而苦苦挣扎,它基本上应该遵循这个逻辑:

IF (LeftArrowKeyIsPressed) THEN doSomething;
ELSE IF (RightArrowKeyIsPressed) THEN doSomethingElse;
ELSE IF(按下任何其他键) THEN doNothing;

有人可以帮助我了解构建按键检查的代码语法吗?假设onkeydown正在使用一个事件。

4

1 回答 1

3

添加一个事件侦听器,可能是到窗口,使用addEventListener. 然后关闭该Event.which值以执行您想要的操作。

这是代码。在 jsFiddle 上查看它的实际效果。

/*--- Get or set the codes for the arrow keys.
    Firefox gives us nice constants, Chrome does not.
*/
KeyEvent        = (typeof KeyEvent === "object")  ?  KeyEvent  :  [];
const LEFT_KEY  = KeyEvent.DOM_VK_LEFT   ||  37;
const RIGHT_KEY = KeyEvent.DOM_VK_RIGHT  ||  39;

window.addEventListener ("keydown", keyboardHandler, false);

function keyboardHandler (zEvent) {
    var bBlockDefaultAction = false;

    //--- Assume we want only the plain keys, not the modified versions.
    if (zEvent.altKey  ||  zEvent.ctrlKey  ||  zEvent.shiftKey) {
        //-- Do nothing (most user-friendly option, in most cases).
    }
    else {
        if (zEvent.which == LEFT_KEY) {
            //DO LEFT KEY ACTION HERE.
            bBlockDefaultAction = true;
        }
        else if (zEvent.which == RIGHT_KEY) {
            //DO RIGHT KEY ACTION HERE.
            bBlockDefaultAction = true;
        }
    }

    if (bBlockDefaultAction) {
        zEvent.preventDefault ();
        zEvent.stopPropagation ();
    }
}

此代码适用于用户脚本适用的浏览器(不是 IE)。jQuery 版本是相同的,只是将addEventListener行更改为:

$(window).keydown (keyboardHandler);
于 2012-09-24T09:33:58.903 回答