Problème Chronomètre JavaScript

a marqué ce sujet comme résolu.

Bonjour à tous

J’ai codé un chronomètre en javascript mais j’ai un souci : quand je le lance une fois il marche bien, mais dés que je le relance il va 2 fois plus vite, puis 3 fois plus vite, et ainsi de suite…

Je pense que l’erreur vient du setTimeout mais je ne sais pas comment la corriger donc j’aimerais bien un peu d’aide.

Merci d’avance

Voici le code js :

var sec = document.getElementById(’secondes’);

var bouton = document.getElementById(’bouton’);

var c;

bouton.addEventListener(’click’, init)

function init(){

c=11;

}

bouton.addEventListener(’click’, lancerchrono);

function lancerchrono(){

c—;

sec.innerHTML= c + " secondes restantes";

if(c<=0){

sec.innerHTML="Temps Ecoulé ! "

}

setTimeout (lancerchrono,1000);

}

Je pense que l’erreur vient du setTimeout mais je ne sais pas comment la corriger donc j’aimerais bien un peu d’aide.

En effet ton problème vient de setTimeout

Ce que fait ton code actuel quand tu clique sur le bouton, c’est de lancer une 2eme fonction lancerchrono, alors que la précédente n’est pas encore terminée. Si tu veux conserver cette logique/algo (que je trouve etrange d’ailleurs car ça me semble un nid a problème), tu devrais d’abord stopper l’ancienne fonction en cours avant de lancer une autre.

Pour stopper ta fonction en cours, tu as la fonction, clearTimeout(id) qui existe, que tu devrais lancer quand tu clique sur ton bouton. Comme tu veux le voir, la fonction prend en paramètre un id. Il faut donc que tu penses a sauvegarder l’état courant de la fonction en cours pour pouvoir appliquer le clearTimeout dessus.

Un truc dans ce gout là.

var id = "";

/* ton code */

if(id != "")
{ clearTimeout(id) }

/* ton code */

id = setTimeout (lancerchrono,1000);

/* ton code */

Tu dois utiliser la fonctionnalité Bloc de code coloré de l’éditeur afin qu’il soit correctement formaté. C’est le symbole ci-contre sur le nouvel éditeur.

Sinon, dans ton cas, tu as peut-être envie d’utiliser la fonction setInterval, qui va exécuter la fonction lancerchrono toutes les 1 seconde lors d’un clic sur le bouton. En revanche, tu dois bien t’assurer d’utiliser clearInterval pour éviter justement qu’ils "se superposent". Pour cela, il faut le passer dans une variable.

EDIT : Devancé par une petite souris. ^^

+1 -0

@Big-Blob attention aux conseils hors sujet quand tu as un débutant en face : restons concentrés sur le sujet.


Et l’anglais n’a pas à être la langue par défaut d’un code, surtout s’il est maintenu par des français : un code doit être compréhensible avant tout.

viki53

J’ai effacé mes conseils. Je comprends qu’ils sont hors sujet.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte