【问题标题】:UserScript to take actions based on Key Press?UserScript 根据按键采取行动?
【发布时间】:2012-09-15 12:54:21
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript dom-events userscripts onkeydown


    【解决方案1】:

    使用addEventListener 添加一个事件监听器,可能是到窗口中。然后关闭Event.which 值来做你想做的事。

    这是代码。 See it in action at 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);
    

    【讨论】:

    • 谢谢,伙计,我一直在努力解决 if 系统的结构问题,所以这非常有用。这应该被标记为用户脚本指南,IMO :)
    猜你喜欢
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多