Может ли javascript сказать разницу между левой и правой клавишей shift?
в основном это проверка на вменяемость. Код ключа для обеих клавиш shift-16. Означает ли это, что на самом деле невозможно различить события сдвига влево и вправо в браузере?
4 ответов
в новых браузерах, поддерживающих 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){
}
Internet explorer способен различать сдвиг влево и вправо с помощью свойства shiftLeft:
в противном случае, они неразличимы.
можно использовать event.code
(физическая строка клавиатуры) вместо event.key
(числовое значение ascii).
KeyboardEvent.свойство code представляет физическую клавишу на клавиатуре (в отличие от символа, созданного нажатием клавиши).
если вы прокрутите вниз до "значения кода" внизу, вы можете найти две клавиши Shift:
"ShiftLeft"
, "ShiftRight"
самый простой способ сделать это
$(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>
Примечание: при запуске фрагмента кода для активации клавиш клавиатуры необходимо щелкнуть внутреннее пустое пространство. Это тестируется в Chrome и Safari.