De l'utilisation de setTimeout
Bonjour à tous,
Pour vous situer le contexte, je suis en train de développer une application web permettant de retracer la route de véhicules professionnels en utilisant l'API GoogleMap.
J'ai voulu,implémenter une fonction qui ferait avancer un petit rond rouge (le véhicule) tout le long de sa route.
J'ai donc choisit d'utiliser la récursivitée (et donc setTimeout), en rappelant une fonction qui dessine un rond rouge à un point donné dans elle même (avec un nouveau point :) ).
Je vous explique mon probleme : Comme tout cela est en JavaScript j'ai placé quelques alert afin de pouvoir débugguer.... Et ma fonction marche parfaitement avec un alert placé au début de celle ci. Seulement lorsque je le retire (afin que le rond rouge avance tout seul sans faire "ENTRE" à chaque fois) le navigateur (que ce soit IE ou Firefox) explose.
Je me suis d'abord dit que l'interval de temps n'était pas assez grande, que la carte n'avait pas le temps de se rafraichir mais même avec une intervalle plus grande (et même très très grande :aie:) ce la plante toujours.
Voici le code (ne faites pas attention aux commentaires...):
Code:
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 39 40 41
|
lancerParcours: function(dirIndex, pointIndex, interval){
//alert("Début traitement");
if(!this.fin)
{
// Dans le cas ou nous ne traitons pas le premier point
// on supprime l'ancien cercle
if(this.first) this.first = false;
else
{
this.removeOverlay(this.Polygons[0]);
this.Polygons.splice(0,1);
}
// on passe stepMarker a true. (afin de ne pas effectuer de callback)
if(!this.stepMarker) this.stepMarker = true;
// on créé le cercle
if(!this.Polygons) this.Polygons = new Array();
this.Polygons.push(createCircle(this.Directions[dirIndex].getMarker(pointIndex).getLatLng(), 0.008, 60, 2, 1, "#a00000", 0.9, "#ff0000"));
// on l'affiche
this.addOverlay(this.Polygons[0]);
// on redefini le zoom
this.setZoom(16);
// on centre la carte sur le cercle
this.panTo(this.Directions[dirIndex].getMarker(pointIndex).getLatLng());
// Dans le cas ou il reste des points a traiter dans la direction courante
if(pointIndex < this.Directions[dirIndex].Waypoint.length-1) pointIndex++;
else
{
// Si il n'y a plus de points on change de direction
if (dirIndex < this.Directions.length-1)
{
dirIndex++;
pointIndex = 1;
}
else this.fin = true;
}
// on rappelle la fonction avec une intervalle de "interval" ms
setTimeout(this.lancerParcours(dirIndex, pointIndex, interval),interval);
}
else alert("La tournée est terminée!");
}, |
Voila, donc si quelqu'un aurait une idée ou une suggestion, je suis preneur :D...