多个按键的查找表

时间:2014-09-27 13:54:44

标签: javascript

我正在尝试创建一个查找表(因为我有大量要处理的键)来处理我的键功能。到目前为止,我已经能够处理单键按下,如下所示:

(function(){
       document.body.addEventListener('keydown',keysHandler,false); 
       var keyLookUp = {37:leftKey,39:rightKey,40:DownKey...etc}

       function keysHandler(e){
          event = e || window.event;
          var keycode = event.which || event.keyCode;
          keyLookUp[keycode](e);
       }

       function leftKey(e){

        }

       function rightKey(e){

       }

       function DownKey(e){

       }

})();

如何将上述代码修改为处理多键按下功能?比如按 Shift +左键

1 个答案:

答案 0 :(得分:0)

  

如何修改上述代码以处理多键按下[例如]按 Shift +

Shift Ctrl Alt Alt Gr 修饰符密钥,这意味着它们是作为您致电e的活动的一部分发送的,分别存储为e.shiftKeye.ctrlKeye.altKeye.altGraphKey

那么这对你意味着什么?如果你想保持目前的结构,我认为你有三个选择;你可以

  1. 为修改后的版本编写完全不同的函数,例如

    keyLookUp['37sc'] = leftKeyShiftCtrl;
    
    keyLookUp[
        keycode
        + (e.shiftKey ? 's' : '')
        + (e.ctrlKey? 'c' : '')
        + (e.altKey ? 'a' : '')
    ](e);
    
  2. 在当前处理程序中查看这些值

    // inside fn
    if (e.shiftKey) {/* different code path */}
    
  3. 将这些作为参数传递给您的处理程序(需要额外的参数)

    function leftKey(e, shift, ctrl, alt) { /* ... */ }
    
    keyLookUp[keycode](e, e.shiftKey, e.ctrlKey, e.altKey);
    

  4. 对于任何组合键,您需要跟踪 keydown keyup ,请参阅this question