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



浏览了一些关键事件的javascript库,发现这个我认为很酷。基本上,使用它你可以做这样的事情:

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 和 keydown 事件非常陌生,所以如果你能解释一下代码,那就太好了。
即使只是想向我展示如何完成我请求的语法的一部分,那也没关系。

您可以通过按键执行此操作,因为只有在按键中,您才能按字符更改 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');
});

它只有在 shift 是第一个时才有效。

相关内容

  • 没有找到相关文章

最新更新