javascript boucle de minuterie
Je veux créer un timer qui une fois atteint un certain point, le temporisateur est réinitialisé, puis recommence.
Droit maintenant, j'ai la boucle de mettre en place, et comme un test, je veux la remise à zéro après 5000 ms (5 secondes). Mais le compteur va tout détraquer.
WIP Démo ici: http://jsfiddle.net/stursby/wUHA3/
- Avant que je clique sur la démo, va planter mon navigateur?
:P
- Le compteur ne s'réinitialiser Firefox...
- haha non, c'est pas une boucle infinie. Je suis à jour le texte d'un span avec la valeur actuelle du timer... de sorte que la seule chose qui obtient foiré, vous allez voir.
- Vous pouvez regarder le code de cette question est accepté réponse: stackoverflow.com/questions/8634415/...
- vous ne savez pas si IE soutient, mais
Date.now()
est un peu plus propre quenew Date().getTime()
Vous devez vous connecter pour publier un commentaire.
Au lieu de setTimeout, pensez à utiliser setInterval. Il répétera automatiquement jusqu'à ce que vous désactivez l'intervalle.
var diff = (new Date().getTime() - start) - time;
il n'est pas nécessaire pour cette ligne. Il devrait être faitwindow.setTimeout(instance, 100);
au lieu dewindow.setTimeout(instance, (100 - diff));
. Et son problème est résolu.var timer = setInterval(function(){ doStuff() }, 1000);
Au clair par la suite l'intervalle de temps (et de l'arrêt de la minuterie):clearInterval(timer);
Je suis d'accord avec keyboardP que vous devriez probablement utiliser des
setInterval
au lieu desetTimeout
. Cependant, pour répondre à votre question de départ, la raison pour laquelle vous rencontrez des problèmes avec la minuterie est à cause de votre répétition de la logique. Ne pas utiliser:Vous n'avez pas besoin d'essayer et de tenir compte du temps d'exécution (ce qui je suppose est ce que vous essayiez de le faire avec
diff
). Il suffit de supposer qu'il est négligeable et l'utilisation:Et votre problème est résolu, comme vous pouvez le voir dans cette jsFiddle.