Повторное использование Liqp Liquid Template

Решение:

var activeKeys = [];

//determine operating system
var os = false;
window.addEventListener('load', function() {
  var userAgent = navigator.appVersion;
  if (userAgent.indexOf("Win") != -1) os = "windows";
  if (userAgent.indexOf("Mac") != -1) os = "osx";
  if (userAgent.indexOf("X11") != -1) os = "unix";
  if (userAgent.indexOf("Linux") != -1) os = "linux";
});

window.addEventListener('keydown', function(e) {
  if (activeKeys.indexOf(e.which) == -1) {
    activeKeys.push(e.which);
  }

  if (os == 'osx') {

  } else {
    //use indexOf function to check for keys being pressed IE
    if (activeKeys.indexOf(17) != -1 && activeKeys.indexOf(86) != -1) {
      console.log('you are trying to paste with control+v keys');
    }
    /*
      the control and v keys (for paste)
      if(activeKeys.indexOf(17) != -1 && activeKeys.indexOf(86) != -1){
        command and v keys are being pressed
      }
    */
  }
});

window.addEventListener('keyup', function(e) {
  var result = activeKeys.indexOf(e.which);
  if (result != -1) {
    activeKeys.splice(result, 1);
  }
});

Объяснение: Я столкнулся с этой проблемой и придумал свое решение. e.metaKey, похоже, не работает с событием keyup в Chrome и Safari. Тем не менее, я не уверен, что это было специфично для моего приложения, поскольку у меня были другие алгоритмы, блокирующие некоторые ключевые события, и я, возможно, ошибочно заблокировал мета-ключ.

Этот алгоритм отслеживает, что клавиши идут вниз, а затем добавляет их к списку ключей, которые в настоящее время нажаты. При выпуске ключ удаляется из списка. Проверьте наличие одновременных клавиш в списке, используя indexOf, чтобы найти коды клавиш в массиве.

0
задан Nick 18 January 2019 в 16:20
поделиться