Vérifier si une touche est en panne?
Est-il un moyen de détecter si une clé est actuellement en panne en JavaScript?
Je sais à propos de l'événement "keydown", mais ce n'est pas ce dont j'ai besoin. Peu de temps APRÈS que la touche est pressée, je veux être en mesure de détecter si elle est toujours pressé.
P. S. Le plus gros problème semble être que, après une certaine période de temps la clé commence à se répéter, de tirer keydown et keyup des événements comme un démon. J'espère qu'il est juste un simple isKeyDown(touche de fonction), mais si non, alors ce problème à surmonter /travaillé autour de.
- Un problème commun avec les réponses que je vois ici, c'est que si vous maintenez une touche enfoncée, puis changer les onglets ou changer d'orientation, laissez la clé, et puis revenir, le code crois que la clé est vers le bas jusqu'à ce que vous appuyez à nouveau ou déplacez la souris sur la page. 🙁
Vous devez vous connecter pour publier un commentaire.
Nope. La seule possibilité est de la surveillance de chaque
keyup
etkeydown
et de se souvenir.Il ne devrait pas. Vous aurez certainement obtenir
keypress
répéter, et dans la plupart des navigateurs vous aurez également répétékeydown
, mais sikeyup
répète, c'est un bug.Malheureusement, il n'est pas totalement inédite bug: sur Linux, Chrome et Firefox (lorsqu'il est exécuté sous GTK+, qui est populaire des distributions comme Ubuntu) de générer à la fois de répéter keyup-touche-keydown séquences pour les touches, qui sont impossibles à distinguer de quelqu'un en martelant la touche vraiment rapide.
keyup
événements.keyup
événements ont été émises ainsi ?En plus de l'utilisation de
keyup
etkeydown
auditeurs à suivre quand est la clé va en bas et en arrière jusqu'à, il y sont en fait, certaines des propriétés que vous dire si certaines clés sont à la baisse.Sont disponibles sur tous les navigateurs d'événement généré des objets, tels que ceux de
keydown
,keyup
, etkeypress
, de sorte que vous n'avez pas à utiliser mousemove.J'ai essayé de générer mon propre événement objets avec
document.createEvent('KeyboardEvent')
etdocument.createEvent('KeyboardEvent')
et à la recherche d'e.shiftKey
et, mais j'ai pas eu de chance.Je suis en utilisant google Chrome 17 sur Mac
Ma solution:
Je peux maintenant vérifier si une touche est enfoncée n'importe où ailleurs dans le script en cochant
Si c'est vrai que la touche est enfoncée.
Je ne crois pas qu'il existe quelque chose comme un isKeyDown fonction, mais vous pouvez écrire votre propre.
Fondamentalement, créer un tableau dont la longueur est le nombre de touches que vous souhaitez surveiller. Ensuite, à l'aide des documents/pages/contrôles keyUp et keyDown événements, de mettre à jour le tableau avec les clés de l'état.
Puis écrire une fonction qui vérifie si une touche est enfoncée et renvoie un booléen.
Que devrait accomplir ce que vous voulez.
D'autres personnes ont demandé à ce genre de question avant (même si je ne vois pas du tout évident dupes ici et maintenant).
Je pense que la réponse est que la
keydown
de l'événement (et son jumeaukeyup
) sont toutes les informations que vous obtenez. De répétition est câblé assez fermement dans le système d'exploitation, et un programme d'application n'est pas beaucoup d'une occasion d'interroger le BIOS de l'état réel de la clé.Ce que vous pouvez faire, et peut-être si vous avez besoin de ce travail, est par programmation de rebondir sur la touche. Essentiellement, vous pouvez évaluer
keydown
etkeyup
vous-même, mais ignorer unkeyup
événement si elle a lieu trop rapidement après la dernièrekeydown
... ou essentiellement, vous devez retarder votre réponse àkeyup
assez longtemps pour être sûr qu'il n'y pas d'autrekeydown
événement suivant avec quelque chose comme de 0,25 secondes de lakeyup
.Cela nécessiterait l'utilisation d'une minuterie de l'activité, et l'enregistrement de l'ordre de la milliseconde fois pour les événements précédents. Je ne peux pas dire que c'est une solution très attrayante, mais...
Le code suivant est ce que je suis en utilisant:
Lorsque l'utilisateur maintient en maintenant la touche Alt enfoncée pendant un certain temps (environ 2 secondes), un groupe d'étiquettes (classe='clé cachée") s'affiche. Lorsque la touche Alt est publiée, les étiquettes de disparaître. jQuery et Bootstrap sont tous deux utilisés.
Fini ici pour vérifier si il y avait quelque chose d'intégré au navigateur, mais il semble qu'il ne l'est pas. C'est ma solution (très similaire à Robert de réponse):
Vous pouvez ensuite vérifier si une touche est pressée avec
is_key_down('ArrowLeft')
.Regarder cette réponse, et l'utilisation
onkeyup
etonkeydown
. Ici est informations plus spécifiques sur ces événements.Je sais que c'est une très vieille question, cependant, il est très léger (~.5 ko) bibliothèque JavaScript qui fait des "patchs" l'incohérence des tirs de clavier gestionnaires d'événements lors de l'utilisation de l'API DOM.
La bibliothèque est Keydrown.
Voici les opératoire de l'exemple de code qui a bien fonctionné pour mes besoins, en changeant juste la clé sur lequel l'auditeur:
J'ai incorporé Keydrown dans mon JavaScript côté client pour une bonne pause d'animation dans une Lumière Rouge Lumière Verte jeu que je suis en train d'écrire. Vous pouvez voir l'ensemble du jeu ici. (Note: Si vous lisez ceci dans l'avenir, le jeu doit être le code complet et jouable :-D!)
J'espère que cette aide.
J'ai scanné les réponses ci-dessus, et le projet de
keydown
/keyup
approche ne fonctionne que dans des circonstances particulières. Si l'utilisateur alt-tab, loin, ou utilise l'un des principaux geste pour ouvrir une nouvelle fenêtre de navigateur ou de l'onglet, puis unkeydown
sera enregistré, ce qui est bien, parce qu'à ce moment, il est impossible de dire si la clé est quelque chose de la web app est la surveillance, ou d'un navigateur standard ou OS de raccourci. Retour à la page du navigateur, il pense toujours que la touche est enfoncée, mais il a été libéré dans l'intervalle. Ou quelques-clé est tout simplement gardé lieu, alors que l'utilisateur est de passer à un autre onglet ou une application avec la souris, puis diffusées à l'extérieur de notre page.Touches de modification (
Shift
etc.) peut être écouté viamousemove
etc. en supposant qu'il existe au moins une interaction de la souris prévu lors de la tabulation arrière, ce qui est souvent le cas.Pour la plupart des toutes les autres touches (à l'exception des modificateurs,
Tab
,Delete
, mais y compris lesSpace
,Enter
), suivikeypress
pourrait fonctionner pour la plupart des applications - une touche continuera à feu. Il y a une certaine latence lors de la réinitialisation de la clé cependant, en raison de la périodicité dekeypress
de tir. En gros, sikeypress
ne gardez pas de tir, il est alors possible d'éliminer la plupart des clés. Ceci, combiné avec les modificateurs est assez hermétique, bien que je n'ai pas exploré quoi faire avecTab
etBackspace
.Je suis sûr qu'il y a une bibliothèque qui résumés sur ce DOM faiblesse, ou peut-être que certains DOM changement de norme a pris soin d'elle, car c'est une assez vieille question.
si vous appuyez sur alt + entrée, vous verrez l'alerte.