Ich habe die oben genannten Antworten und die vorgeschlagenen keydown
/ keyup
Dieser Ansatz funktioniert nur unter besonderen Umständen. Wenn der Benutzer mit der Alt-Taste weggeht oder eine Tastengeste verwendet, um ein neues Browserfenster oder eine neue Registerkarte zu öffnen, dann wird ein keydown
wird registriert, was in Ordnung ist, denn zu diesem Zeitpunkt ist es unmöglich zu sagen, ob die Taste etwas ist, das die Web-App überwacht, oder eine Standard-Browser- oder Betriebssystem-Verknüpfung ist. Wenn Sie zur Browserseite zurückkehren, wird sie immer noch denken, dass die Taste gedrückt ist, obwohl sie in der Zwischenzeit losgelassen wurde. Oder eine Taste wird einfach gedrückt gehalten, während der Benutzer mit der Maus zu einer anderen Registerkarte oder Anwendung wechselt, und dann außerhalb unserer Seite losgelassen.
Modifikatortasten ( Shift
usw.) können über mousemove
usw., wenn man davon ausgeht, dass beim Zurückblättern mindestens eine Mausinteraktion zu erwarten ist, was häufig der Fall ist.
Für die meisten anderen Tasten (außer Modifikatoren, Tab
, Delete
aber einschließlich Space
, Enter
), Überwachung keypress
würde für die meisten Anwendungen funktionieren - eine gedrückte Taste feuert weiter. Es gibt jedoch eine gewisse Latenz beim Zurücksetzen der Taste, aufgrund der Periodizität von keypress
feuern. Im Grunde genommen, wenn keypress
nicht mehr zündet, kann man die meisten Schlüssel ausschließen. In Kombination mit den Modifikatoren ist das ziemlich sicher, obwohl ich noch nicht untersucht habe, was man mit Tab
y Backspace
.
Ich bin sicher, es gibt einige Bibliothek gibt, die über diese DOM Schwäche abstrahiert, oder vielleicht einige DOM-Standard-Änderung kümmerte sich um es, da es eine ziemlich alte Frage ist.
15 Stimmen
Ein häufiges Problem bei den Antworten, die ich hier sehe, ist, dass, wenn Sie eine Taste gedrückt halten, dann die Registerkarte wechseln oder den Fokus ändern, die Taste loslassen und dann zurückschalten, der Code glaubt, dass die Taste gedrückt ist, bis Sie sie erneut drücken oder die Maus über die Seite bewegen :-(
0 Stimmen
Ist damit Ihre Frage beantwortet? JavaScript: Prüfen, ob Maustaste gedrückt?