2010-09-07 4 views
2

Sur le window Je lie deux événements keydown. La condition pour le déclenchement d'une fonction de rappel est une certaine séquence:Faire des combos avec le clavier et détecter le plus précis

Event #1: ["down", "right", "a"] 
Event #2: ["down", "right", "down", "right", "a"] 

Comment puis-je vérifier si l'utilisateur a appuyé l'événement 2 touches, puis annuler l'événement 1?

Here is the code, se concentrer sur la div rouge et appuyez sur les touches ▼ ►▼ ►A, vous verrez les deux événements de déclenchement. J'ai besoin de savoir comment puis-je vérifier si un plus précis a été déclenché ...

Pour vérifier si la séquence est correcte, je compare la séquence avec la fin de l'entrée utilisateur.

Répondre

1

Le plus précis, est celui avec plus de clés. Alter votre code de sorte qu'il ne $(window).kb une fois, et d'enregistrer une séquence, on appelle une autre fonction qui remplira une structure de tableau semblable à ceci:

[ 
{ 
    seq:["down", "right", "down", "right", "a"], 
    callback: cb1 
}, 
{ 
    seq:["down", "right", "a"], 
    callback: cb2 
} 
] 

la fonction d'enregistrement insérera tout nouvel élément dans ce tableau en fonction de son seq.length, donc ce tableau sera toujours trié plus précis à moins précis.

Maintenant votre seul $(window).kb, boucle chaque fois ce tableau à la recherche d'une correspondance, une fois trouvé, il appellera le callback correspondant et arrête d'itérer le tableau.

+0

Votre indice a été utile. Voici le code mis à jour http://jsfiddle.net/5xGa6/1/. Ça semble fonctionner correctement. – BrunoLM

+0

@BrunoLM Merci de partager le nouveau code :) – aularon

+0

Np :) J'ai optimisé le code (http://stackoverflow.com/questions/3662633/how-can-i-optimize-this-code) et maintenant cela pourrait soit la version finale http://jsfiddle.net/eQUhr/ – BrunoLM

Questions connexes