Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.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 多个按键的查找表_Javascript - Fatal编程技术网

Javascript 多个按键的查找表

Javascript 多个按键的查找表,javascript,Javascript,我正在尝试创建一个查找表,因为我要处理大量的键来处理我的键功能。到目前为止,我已经能够处理单键按下,如下所示: (function(){ document.body.addEventListener('keydown',keysHandler,false); var keyLookUp = {37:leftKey,39:rightKey,40:DownKey...etc} function keysHandler(e){ even

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

(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+left键

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

键Shift、Ctrl、Alt和Alt Gr是修改键,这意味着它们作为调用e的事件的一部分发送,并分别存储为e.shiftKey、e.ctrlKey、e.altKey和e.altGraphKey

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

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

keyLookUp['37sc'] = leftKeyShiftCtrl;

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

// inside fn
if (e.shiftKey) {/* different code path */}
将这些作为参数传递到处理程序中,这些处理程序使用额外的参数

function leftKey(e, shift, ctrl, alt) { /* ... */ }

keyLookUp[keycode](e, e.shiftKey, e.ctrlKey, e.altKey);

对于任何键的组合,您都需要跟踪keydown和keydup,请参见

Yaa我已经研究过这个问题了……它比我想象的要复杂……不过对于您的洞察力来说。。