boucle de minuterie javascript

Je veux créer une minuterie qui, une fois qu'elle atteint un certain point, la minuterie se réinitialise, puis recommence.

En ce moment, j'ai mis en place la boucle, et en tant que test, je veux la Réinitialiser après 5000 ms (5 secondes). Mais le compteur est complètement détraqué.

WIP Démo ici: http://jsfiddle.net/stursby/wUHA3/

23
demandé sur stursby 2011-12-29 05:55:36

2 réponses

Au lieu de setTimeout, envisagez d'utiliser setInterval. Il se répétera automatiquement jusqu'à ce que vous effacez l'intervalle.

setInterval(myMethod, 5000);

function myMethod( )
{
  //this will repeat every 5 seconds
  //you can reset counter here
}
55
répondu keyboardP 2011-12-29 02:00:42

Je suis d'accord avec keyboardP que vous devriez probablement utiliser setInterval au lieu de setTimeout. Cependant, pour répondre à votre question initiale, la raison pour laquelle vous rencontrez des problèmes avec la minuterie est à cause de votre logique de répétition. Ne pas utiliser:

var diff = (new Date().getTime() - start) - time;
window.setTimeout(instance, (100 - diff));

Vous n'avez pas besoin d'essayer de tenir compte du temps d'exécution (ce que je suppose est ce que vous essayiez de faire avec diff). Supposons simplement que c'est négligeable et utilisez:

setTimeout(instance, 100);

Et votre problème est résolu, comme vous pouvez le voir dans cette jsFiddle.

5
répondu Chad 2011-12-29 02:04:55