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