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ではない)で機能します。addEventListener行を次のように変更することを除いて、jQueryのバージョンは同じです。

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