Может ли javascript указать разницу между левой и правой клавишей сдвига?

В основном это проверка здравомыслия. key code для обеих клавиш сдвига - 16. Значит ли это, что на самом деле невозможно отличить события сдвига влево и вправо в браузере?

Ответ 1

В новых браузерах, поддерживающих DOM3, вы можете использовать event.location для проверки местоположения.

В спецификация DOM3 для местоположения определены 4 константы, DOM_KEY_LOCATION_STANDARD, DOM_KEY_LOCATION_LEFT, DOM_KEY_LOCATION_RIGHT и DOM_KEY_LOCATION_NUMPAD.

В этом случае вы можете сделать:

if (event.location === KeyboardEvent.DOM_KEY_LOCATION_LEFT){

} else if (event.location === KeyboardEvent.DOM_KEY_LOCATION_RIGHT){

}

Ответ 2

Internet explorer способен различать сдвиг влево и вправо с помощью свойства shiftLeft:

свойство (событие) shiftLeft

В противном случае они неразличимы.

Ответ 3

Самый простой способ сделать это

$(document).ready(function(){
  $("html").keydown(function(e) {

      if (e.shiftKey) {
         if (event.location == 1) console.log('left shift');
         if (event.location == 2) console.log('right shift');
      }

  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>