J'aimerais pouvoir piéger la double touche appuyez sur (pour le char type T par exemple) afin de faire un traitement spécial.Je souhaiterait que la touche appuie suffisamment rapidement pour ne pas être interprétée comme deux presses distinctes, Tout comme le double clic. Des idées comment je peux y parvenir? P>
3 Réponses :
Lorsque la ou les touches sont touchées, faites une note de l'heure. Ensuite, comparez-la avec le temps que vous avez noté la dernière fois que ces touches ont été touchées.
Si la différence est dans votre seuil, considérez-la un double. Sinon, ne le faites pas. Exemple rugueux: p>
Cette solution utilise la touche Ctrl. Il ne dit pas qu'il a besoin que (bien qu'il me semble logique).
@josh Stodola: B> ha! Montre à quel point je suis prudent de lire ... a vu "char t", lire "Ctrl t" ... Oups!
avoir une variable (peut-être Dans votre événement KeyPress, si cette variable est vraie, vous avez une double appuyez sur une double appui. p> Exemple: P> first_press code>) que vous avez défini sur true lorsqu'un événement KeyPress se produit et démarrez une minuterie qui réinitialisera la variable à FALSE après une durée définie (si vite que vous voulez les appuyer sur les touches).
var first_press = false;
function key_press() {
if(first_press) {
// they have already clicked once, we have a double
do_double_press();
first_press = false;
} else {
// this is their first key press
first_press = true;
// if they don't click again in half a second, reset
window.setTimeout(function() { first_press = false; }, 500);
}
}
Et vous pouvez faire «une demi-a-second» une valeur persistante configurable que les utilisateurs peuvent changer. Règles de convivialité!
Je n'essayais pas de fournir une solution de goutte pour lui. Il suffit de lui montrer l'idée générale.
Quoi qu'il en soit, vous allez avoir des tonnes de délais d'attente à la fois, ce qui finira par apporter au navigateur des utilisateurs à genoux. La réponse de Shog en utilisant la date est définitivement meilleure.
@JOSH STODOLA: B> qui pourrait probablement être évité en enregistrant l'identifiant de la minuterie quelque part et en l'empêchant de commencer une nouvelle. Cela dit, c'est plus de travail que de simplement garder un horodatage ... La seule utilisation que je peux penser à ce que ce soit si vous souhaitiez effectuer deux actions différentes et mutuellement exclusives pour une presse à simple pression et une double presse: un chèque dans le Le rappel de la minuterie pourrait déclencher l'ancien si first_press code> était toujours vrai, et ce dernier s'il était faux.
Je sais qu'il est trop tard pour répondre, mais voici comment j'ai mis en œuvre que:
Bienvenue sur Stackoverflow. En plus de la réponse que vous avez fournie, veuillez envisager de fournir une brève explication de la raison et de la manière dont cela fixe la question.