web-dev-qa-db-fra.com

boucle de minuterie javascript

Je veux créer un minuteur qui, une fois qu'il atteint un certain point, le minuteur se réinitialise, puis recommence.

En ce moment, j'ai la boucle configurée, et comme test, je veux qu'elle se réinitialise après 5000 ms (5 secondes). Mais le compteur se détraque.

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

24
stursby

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

setInterval(myMethod, 5000);

function myMethod( )
{
  //this will repeat every 5 seconds
  //you can reset counter here
}
58
keyboardP

Je suis d'accord avec keyboardP que vous devriez probablement utiliser setInterval au lieu de setTimeout. Cependant, pour répondre à votre question d'origine, la raison pour laquelle vous rencontrez des problèmes avec le minuteur est due à 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 qui, je suppose, est ce que vous essayez de faire avec diff). Supposez simplement qu'il est négligeable et utilisez:

setTimeout(instance, 100);

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

5
Chad