使用一个函数在 javascript 中按下多个键时绑定一个函数

Bind a function to when mutiple keys are pressed in javascript using one function

正在浏览一些关键事件 javascript 库,发现 this one 我认为很漂亮 cool.Basically,使用它你可以做类似这样的事情:

function bindFunctionToKeydownEvents(keys, callback) {
  // code here
}

其中的键可能只是一个键:"k", "(", or "=", 组合键:"ctrl+k" or "shift+ctrl+k", 或序列(输入字母 g 然后在 3 秒内输入另一个字母 o 类似 gmail 样式)g o 做某事
然后回调将是一个函数。function(){alert("hi");foo();bar();}
有没有一种方法可以在一个 javascript 函数中执行此操作,因为我不想添加该库? 我真的希望它能够支持多个回调,例如能够运行: bindFunctionToKeydownEvents("ctrl+k", function(){alert("hi")});
然后做 bindFunctionToKeydownEvents("ctrl+shift+k", function(){alert("hello")});
并在按下 ctrl+shift+k 时让它执行这两项操作。
我对 javascript 和按键事件还很陌生,所以如果你能解释一下代码那就太好了。
即使只是想向我展示如何执行我请求的语法的一部分,那也很好。

您可以使用 keypress 执行此操作,因为只有在 keypress 中您才能通过字符更改 keyCode:

var keypress = {};
function bindFunctionToKeypressEvents(keys, callback) {
  keys = keys.toLowerCase();
  keypress[keys] = keypress[keys] || [];
  keypress[keys].push(callback);
}
document.addEventListener('keypress', function(e) {
  var str = '';
  if (e.shiftKey) {
    str += 'shift+';
  }
  if (e.ctrlKey) {
    str += 'ctrl+';
  }
  str += String.fromCharCode(e.charCode).toLowerCase();
  if (keypress[str] && keypress[str].length) {
    keypress[str].forEach(function(fn) {
      fn();
    });
  }
}, true);

bindFunctionToKeypressEvents('shift+l', function() {
  alert('shift+l');
});

只有当班次是第一个班次时才有效。