Какие-нибудь хорошие реализации сочетаний клавиш в стиле Fogbugz? - PullRequest
8 голосов
/ 02 ноября 2010

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 20 января 2011

Есть несколько вещей, которые вы можете сделать, чтобы достичь этого. Чтобы уточнить, вы хотели бы иметь возможность использовать комбинацию клавиш 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 запустить свои соответствующие функции.

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

0 голосов
/ 02 ноября 2010

Возможно, плагин JQ Hotkeys ...

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

...