Я відсканував наведені вище відповіді, і запропонований keydown
/ keyup
підхід працює лише за особливих обставин. Якщо користувач клавіші alt-tabs відсутній або використовує клавішний жест, щоб відкрити нове вікно або вкладку браузера, то akeydown
буде зареєстровано , що нормально, оскільки на той момент неможливо визначити, чи є ключ тим, що контролює веб-програма , або є стандартним ярликом браузера або ОС. Повернувшись на сторінку браузера, він все одно буде думати, що ключ утримується, хоча тим часом його випустили. Або якусь клавішу просто утримують, поки користувач переходить на іншу вкладку або програму за допомогою миші, а потім випускається за межі нашої сторінки.
Клавіші-модифікатори ( Shift
тощо) можна контролювати за допомогою mousemove
тощо, припускаючи, що при вкладенні назад очікується принаймні одна взаємодія з мишею, що часто буває.
Для більшості всіх інших клавіш (крім модифікаторів, Tab
, Delete
, але в той числі Space
, Enter
), моніторинг keypress
буде працювати для більшості додатків - ключ утримується в натиснутому положенні буде продовжувати вогонь. Однак у перезавантаженні ключа є деяка затримка через періодичність keypress
стрільби. В основному, якщо keypress
не продовжує стріляти, тоді можна виключити більшість клавіш. Це в поєднанні з модифікаторами досить герметично, хоча я не досліджував, що робити з Tab
та Backspace
.
Я впевнений, що там є бібліотека, яка абстрагується від цієї слабкості DOM, або, можливо, якась зміна стандарту DOM подбала про це, оскільки це досить давнє запитання.