Любые хорошие реализации сочетаний клавиш в стиле Fogbugz?

Fogbugz имеет очень хорошую реализацию горячих клавиш.

Вы нажимаете CTRL+;, и следующая клавиша, которую вы нажимаете, будет соответствовать элементу пользовательского интерфейса на текущей странице.

Это аккуратно предотвращает конфликт с существующими сочетаниями клавиш браузера (как в случае, если вы просто попытались добавить CTRL+A, CTRL+B.. сочетания клавиш).

Еще лучше, после того как вы нажмете CTRL+; «Маленькие желтые метки появятся над каждым действием с его ярлыком». Таким образом, у вас всегда есть мгновенная ссылка на сочетание клавиш.

Полная информация здесь: http://fogbugz.stackexchange.com/questions/4310

Кто-нибудь видел реализацию на основе jQuery (или другую), лежащую вокруг, которую мы могли бы использовать?


person J22    schedule 02.11.2010    source источник


Ответы (2)


Есть несколько вещей, которые вы можете сделать, чтобы достичь этого. Чтобы уточнить, вы хотели бы иметь возможность использовать комбинацию клавиш Ctrl + ;, чтобы следующее нажатие клавиши запускало фрагмент кода? Если это то, что вы ищете, вы можете сделать что-то вроде этого: (в jQuery)

// For getting the function corresponding to the key
    function getPosition(arrayName,arrayItem)
    {
      for(var i=0;i<arrayName.length;i++){ 
       if(arrayName[i]==arrayItem)
            return i;
      }
    }
        // Written By Ben Bales


    var ctrlDown = false; // Tells if the cotrol button is currently down
    var semicolonDown = false; // Tells if the semicolon button is down
    var allowShortcut = false; // Allows the key following ctrl+; to run a function
    var keyTimeout = 800; // Allows the following keystroke within this amount of milliseconds after ctrl+;

    // reset allowShortcut
    function disableShortcut()
    {
         allowShortcut = false;
        console.log("dead");

    }    

    $(document).keydown(function(e){
        if(e.keyCode == 17) ctrlDown = true;
        if(e.keyCode == 186 || e.keyCode == 59) semicolonDown = true;
         //console.log("Semicolon: "+semicolonDown);
         //console.log("Ctrl: "+ctrlDown);


        // If both keys are down, allow a following key to do something


        if(allowShortcut == true)
        {
            var key = e.keyCode;
            //alert(key);

                var actionPos = getPosition(keyArray,key);
                actionArray[actionPos]();
                allowShortcut = false;

        }

        if(ctrlDown == true && semicolonDown == true)
        {
            allowShortcut = true;
            // after a certian amount of time dont allow the following key to do something
            setTimeout(disableShortcut,keyTimeout);
        }

    });

    $(document).keyup(function(e){
        if(e.keyCode == 17) ctrlDown = false;
        if(e.keyCode == 186 || e.keyCode == 59) semicolonDown = false;
    });

    // You may want to put your shortcuts in arrays with corresponding keyCodes like so:

    var actionArray = new Array(doSomething,doSomethingelse);

    var keyArray = new Array(65,66);

    // sample actions

    function doSomething()
    {
        alert("did something");
    }

    function doSomethingelse()
    {
       alert("did something else");
    }

Я просто сделал это быстро и не проверял, но, надеюсь, вы поймете, что он пытается сделать. Но опять же, это решение только для 15-летних. Если вы установили его в шаблоне html и попробовали, попробуйте Ctrl + ;, а затем нажмите A или B< /kbd> для запуска соответствующих функций.

Дайте мне знать, если вам нужна дополнительная помощь!

person BBales    schedule 19.01.2011
comment
игнорировать console.log() (я использовал их для отладки) - person BBales; 20.01.2011

Плагин JQ Hotkeys может подойти...

http://code.google.com/p/js-hotkeys/

person Christophe Eblé    schedule 02.11.2010
comment
Похоже, это мало что делает, кроме привязки нажатий клавиш к обработчикам событий, если я что-то не упустил? - person J22; 03.11.2010