Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Оброботка одновременного нажатия 2-х клавиш (https://javascript.ru/forum/events/59305-obrobotka-odnovremennogo-nazhatiya-2-kh-klavish.html)

NullNull 04.11.2015 22:13

Оброботка одновременного нажатия 2-х клавиш
 
Здравствуйте. Столкнулся с проблемой обработки нажатия 2-х клавиш . Если по 1-ой, то проблем конечно нет , а вот с 2-мя уже похуже обстоят дела.

Нашел пример, вроде разобрался. Получилось что-то такое:

function runOnKeys(func) {
        var codes = [].slice.call(arguments, 1);
      var pressed = {};
        document.onkeydown = function(e) {
          e = e || window.event;
          pressed[e.keyCode] = true;
          for (var i = 0; i < codes.length; i++) { // проверить, все ли клавиши нажаты
            if (!pressed[codes[i]]) {
              return;
            }
          }
          pressed = {};
          func();
        };
        document.onkeyup = function(e) {
          e = e || window.event;
          delete pressed[e.keyCode];
        };
      }
    
 runOnKeys(
        function() {
         var l1 = document.getElementById('lay1');
    l1.style.visibility='visible';
        },
        "1".charCodeAt(0),
        "L".charCodeAt(0)
      );



Но это работает, только при определенных значениях клавиш,например, 1 и L . А нужно, чтобы при ,например, 1 и L - f1() , при 1 и M - f2().

Не могу переделать.
Подскажите, пожалуйста , как это сделать?

рони 04.11.2015 23:06

NullNull,
переписать строки 4 и 15 с on на addEventListener
и запустить runOnKeys дважды с нужными параметрами

NullNull 04.11.2015 23:55

Вот переделал:

function runOnKeys(func) {
        var codes = [].slice.call(arguments, 1);
      var pressed = {};
      document.addEventListener("keydown",function(e) {
          e = e || window.event;
          pressed[e.keyCode] = true;
          for (var i = 0; i < codes.length; i++) { // проверить, все ли клавиши нажаты
            if (!pressed[codes[i]]) {
              return;
            }
          }
          pressed = {};
          func();
        },false);
        document.addEventListener("keyup",function(e) {
          e = e || window.event;
          delete pressed[e.keyCode];
        },false);
      }

 runOnKeys(
        function() {
         var l1 = document.getElementById('lay1');
    l1.style.visibility='visible';
        },
         "1".charCodeAt(0),
        "L".charCodeAt(0) 
      );



теперь вообще не работает

NullNull 05.11.2015 00:16

Исправил ошибку: поменял document на window - работает.
Спасибо огромное за подсказку.


Часовой пояс GMT +3, время: 02:03.