Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Fogbugz风格的键盘快捷键有什么好的实现吗?_Javascript_Jquery_Keyboard Shortcuts_Fogbugz - Fatal编程技术网

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

Javascript Fogbugz风格的键盘快捷键有什么好的实现吗?,javascript,jquery,keyboard-shortcuts,fogbugz,Javascript,Jquery,Keyboard Shortcuts,Fogbugz,Fogbugz有一个非常好的键盘快捷键实现 点击CTRL+;您点击的下一个键将对应于当前页面上的用户界面元素 这巧妙地避免了与现有浏览器键盘快捷键的冲突(如果您只是尝试添加CTRL+A、CTRL+B..样式的快捷键,情况就是这样) 更好的是,在按下CTRL+键之后;“小黄色标签将出现在每个操作及其快捷键上。”因此,您随时都有一个即时键盘快捷键参考 详情如下: 有人见过我们可以使用的基于jQuery(或其他)的实现吗?JQ热键插件可能是一个很好的匹配 要实现这一点,您可以做一些事情。为了澄清,您

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

点击CTRL+;您点击的下一个键将对应于当前页面上的用户界面元素

这巧妙地避免了与现有浏览器键盘快捷键的冲突(如果您只是尝试添加CTRL+A、CTRL+B..样式的快捷键,情况就是这样)

更好的是,在按下CTRL+键之后;“小黄色标签将出现在每个操作及其快捷键上。”因此,您随时都有一个即时键盘快捷键参考

详情如下:


有人见过我们可以使用的基于jQuery(或其他)的实现吗?

JQ热键插件可能是一个很好的匹配


要实现这一点,您可以做一些事情。为了澄清,您希望能够使用键盘组合Ctrl+;允许下一个按键触发一段代码?如果这是您正在寻找的,您可以这样做:(在jQuery中)

//用于获取键对应的函数
函数getPosition(arrayName,arrayItem)
{

对于(var i=0;iIt除了将按键绑定到事件处理程序之外似乎没有什么作用,除非我遗漏了什么?忽略console.log()(我使用它们进行调试)
// 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");
    }