如何实现类似gmail的热键

M4N*_*M4N 6 javascript hotkeys

我想在Web应用程序中实现键盘热键.到目前为止,我一直在使用jquery.hotkeys插件,它允许我实现简单的热键(例如单键击a).

现在要通过键盘支持一些更复杂的导航,我想实现像gmail一样的"多键"热键,例如按下g(对于'go')然后i(对于'inbox')将你带到收件箱.

有没有人知道该任务的javascript组件(jquery插件或类似)?或者,实施此类热键的好方法是什么?

oco*_*odo 7

使用keymasterkeymaster-sequence插件有一个更好的解决方案.

消息来源在这里keymaster.js和这里keymaster.sequence.js

像这样使用它们:

<script type="text/javascript" src="https://raw.github.com/madrobby/keymaster/master/keymaster.min.js"></script>
<script type="text/javascript" src="https://raw.github.com/chevalric/keymaster-sequence/master/keymaster.sequence.min.js"></script>
<script>
key.sequence(["g","i"], function () {
  var el = document.getElementById("result");
  el.innerHTML = "You first pressed 'g', then you pressed 'i'";
});

</script>
<div id="result"></div>
Run Code Online (Sandbox Code Playgroud)

这是一个小型演示http://jsfiddle.net/Nwdyd/1/,它还显示了碰撞处理(绑定g以及g i)

  • @Anand这是根据keymaster的文档设计的. (2认同)

Mat*_*ows 5

g按下时设置全局布尔值。然后检查它是否在i按下时设置。您可以选择在g印刷机上实施超时,以便您有有限的时间进行印刷i

var goPressed = false;
function hotkeyPressed (event) {
    if (event.keyCode == KEYCODE_FOR_G) {
        goPressed == true;
        //Optionally:
        setTimeout(clearPresses, 3000);
    }
    if (event.keyCode == KEYCODE_FOR_I && goPressed) {
        gotoInbox();
    }
}

function clearPresses() {
    goPressed = false;
}
Run Code Online (Sandbox Code Playgroud)

  • 我之所以提到它,是因为您和 Spoike 的回答都重复了 3000 毫秒(因为他正在根据您的代码工作)-因此,暂时来说,这是一个明智的默认建议。当然它是可配置的,但是我认为值得向未来的读者指出,按下按键或按钮时 3 秒是相当长的时间。- 最终,亲爱的读者,做一些用户体验测试并相应地调整它。 (3认同)