javascript - Fogbugz 风格的键盘快捷键有什么好的实现吗?

标签 javascript jquery keyboard-shortcuts fogbugz

Fogbugz 有一个非常好的键盘快捷键实现。

您按下 CTRL+;,您按下的下一个键将对应当前页面上的用户界面元素。

这巧妙地避免了与现有浏览器键盘快捷键的冲突(就像您只是尝试添加 CTRL+A, CTRL +B.. 风格的快捷键)。

更好的是,在您按下 CTRL+; 之后,“每个带有快捷方式的操作都会出现黄色的小标签。”因此,您随时都有一个即时的键盘快捷方式引用。

这里有完整的细节: http://fogbugz.stackexchange.com/questions/4310

有没有人看到我们可以使用的基于 jQuery(或其他)的实现?

最佳答案

您可以采取一些措施来实现这一目标。澄清一下,您希望能够使用键盘组合 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 + ; 然后点击 AB 运行相应功能的键。

如果您需要更多帮助,请告诉我!

关于javascript - Fogbugz 风格的键盘快捷键有什么好的实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4075214/

相关文章:

javascript - 在 Javascript/PHP 中处理绝对 URL 的正确方法?

javascript - 如何使用 CSS(和 JavaScript?)创建模糊的 "frosted"背景?

javascript - 使用 Protractor 测试 HTTP header : (X-)Content-Security-Policy

javascript - Bootstrap - 在中间的 div 中垂直对齐图像

Netbeans:复制插入符号/光标所在的单词

intellij-idea - 是否可以在 Intellij/AS 中使用 "CamelHumps"选项,但让它在双击时选择字段/方法等的全名?

javascript - Date() 与 Date().getTime()

javascript - 选择并单击时如何在 td 内的字段中插入当前完整日期和日期

Jquery 包含 AJAX?想法?

macos - 显示所有Windows OS X特立独行的键盘快捷键