Bonsoir,
J'ai réussi à isoler dans l'exemple ci-dessous un phénomène que je n'arrive pas à expliquer. Il s'agit d'une animation d'un élément pour laquelle la fonction callback semble se lancer 2x. Pour bien comprendre ce que je cherche à réaliser, j'ai réduit le problème en un exemple simpliste de chat/souris :
Au chargement de la page, 1 petit div (qui représente une souris) se déplace aléatoirement de gauche à droite grâce à une animation infinie. Idéalement il doit y avoir plusieurs souris, mais pour simplifier je n'en affiche qu'une.
Lors du clic sur un bouton, 1 autre div (le chat) commence à se déplacer. Une fois l'animation du chat terminée, je décide d'immobiliser les souris.
Voici le code :
Malgré que ce soit simple, il semble que le callback de l'animation du chat soit exécuté 2x, comme le montre le résultat suivant. Par contre j'ai l'impression que ce n'est pas systématique... on dirait que parfois ça se déroule correctement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 <script type="text/javascript"> $(document).ready(function(){ // animation infinie d'une souris function animateMouse(id) { var x = Math.floor(Math.random()*200); $("#"+id).animate({"margin-left":x},400,"linear",function(){ animateMouse(id); }); } // démarre l'animation de la souris animateMouse("mouse1"); $("#button").click(function(){ console.log("click!"); // démarre l'animation du chat $("#cat").animate({"margin-left":200},200,"linear",function(){ console.log("cat stopped"); // immobilise toutes les souris $(".mouse").each(function(i,e){ console.log("stopping mouse "+$(e).attr("id")); $(e).stop(); }); }); }); }); </script> <input type="button" id="button" value="START" /> <div id="cat"></div> <div id="mouse1" class="mouse"></div> <div id="mouse2" class="mouse"></div>
Comble de l'étrangeté, si je commente la ligne $(e).stop(), l'animation se déroule toujours correctement. J'avoue ne pas y comprendre grand chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 click! cat stopped stopping mouse mouse1 cat stopped stopping mouse mouse1
Quelqu'un aurait une explication ? Peut-être que je m'y prend mal pour la boucle infinie ? Merci pour vos idées, toute piste est bonne à prendre.
PS : J'ai testé sous Firefox 7.0.1 avec jQuery1.6.4, 1.6.3 et 1.6.2
Partager