J'ai une fonction JavaScript qui fonctionne lorsque vous appuyez sur la touche "DOWN". Je voudrais, que si la touche "DOWN" est maintenue, la fonction ne fonctionnerait pas du tout. P>
J'ai pensé à la synchronisation entre le clavier et le porte-clés, si le temps est inférieur à 1 seconde, la fonction fonctionnerait sur le porte-clés. Le problème est que si je tiens la clé dans le navigateur le voit comme la clé étant pressée plusieurs fois de suite. P>
Y a-t-il une meilleure façon de le faire? P>
merci p>
7 Réponses :
Vous pourriez peut-être déclencher un compteur sur la clé, puis écouter le prochain porte-clés. Dès que le compteur passe plus de cinq secondes, ou si beaucoup de temps que vous jugez, vous pouvez démarrer la fonction. Avoir un sens? P>
Les clés successifs ne tiennent pas une clé de clé, il est donc possible de différencier entre eux.
http: / /jsfiddle.net/pimvdb/xmfgq/ p>
Si je comprends votre problème, c'est que votre navigateur interprète une clé détenue comme plusieurs événements de clé. Vous voulez que quelque chose de différent se produise si une clé est détenue par rapport à une pression simplement sur laquelle il est simplement pressé; Et vous voulez que cette différence soit basée sur un peu de temps que vous pensez constituer une "détention" la clé. Vous devez donc vous différencier entre une maintenance et une presse en suivant l'événement Keyup. Le pseudocode suivant résoudra ce problème:
sur clé: p> sur porte-clés: p> Cela fonctionnera car la minuterie ne redémarrera pas à moins que l'événement KeyUp n'a eu lieu. P> MAINTENANT ... Si votre navigateur interprète la clé Holding comme:
Keydown, Keyup, Keydown, Keyup .......
Ensuite, vous avez un problème avec cette approche. P> p>
Le navigateur voit la touche enfoncée à plusieurs reprises, mais l'événement code> code> ne se produit que sur la première presse. P>
Ce que vous voulez, c'est la fois à partir de l'événement code> code> et non Keauprimé code>. p>
Je viens d'écrire ce petit script qui différencie entre une touche enfoncée et une touche ELD en baisse de 200 millisecondes. Peut-être que vous pouvez utiliser: jsfiddle p > p>
J'ai eu un problème similaire. Je voulais capturer tous les «premiers» événements clés, mais ignorer les événements successifs s'ils étaient le résultat d'une clé en détention. Je ne sais pas si c'est ce que vous voulez, mais voici une approche:
var repeat = false; el.addEventListener("keyup", function() { repeat = false; }); el.addEventListener("keydown", function() { if (!repeat) { // Run your code. repeat = true; } });
Il y a une propriété d'événement de clavier appelé Répéter qui retourne vrai si la clé est en train d'être maintenue.
document.addEventListener('keydown', (event) => { if(event.repeat) { // key is being held down } else { // key is being pressed } });
Quel est le contexte? Si vous êtes dans une zone de texte, il serait logique de suivre la valeur de l'entrée avant la dernière touche, puis vérifiez pour voir si plusieurs caractères ont été ajoutés sur l'événement suivant? Je viens de pêcher autour de ...
Pourriez-vous définir un drapeau (par exemple une variable booléenne) lorsque le premier code> Keydown code> incendie (mais pas s'il est déjà défini), et non défini sur le bouton
Keyup Code> Fires?