Pour toutes les discussions javascript, jQuery et autres frameworks
-
ben06
- Messages : 4
- Enregistré le : 01 avr. 2020, 03:45
Message
par ben06 » 01 avr. 2020, 03:49
Salut tout le monde !
Je souhaite créer un compte à rebours mais je bloque un peu...
Je l'ai d'abord créé simplement (photo 3) puis j'ai voulu transformer le code en POO (photos 1 & 2).
Là est le problème, tout à l'air de fonctionner sauf la décrémentation automatique chaque seconde (donc setInterval).
Avez-vous des idées ?
Merci d'avance

- Photo 1
- Capture d’écran 2020-04-01 à 03.19.49.png (252.29 Kio) Vu 16452 fois

- Photo 2
- Capture d’écran 2020-04-01 à 03.20.00.png (178.69 Kio) Vu 16452 fois

- Photo 3
- Capture d’écran 2020-04-01 à 03.23.04.png (237.57 Kio) Vu 16452 fois
-
webmaster
- Administrateur du site
- Messages : 617
- Enregistré le : 28 févr. 2017, 15:19
Message
par webmaster » 01 avr. 2020, 11:22
Bonjour,
Difficile de répondre sans voir l'exécution et ajouter des log dans la console
J'aimerai bien avoir le code source complet pour pouvoir regarder.
-
ben06
- Messages : 4
- Enregistré le : 01 avr. 2020, 03:45
Message
par ben06 » 01 avr. 2020, 13:20
Oui en effet, j'aurais dû donner le code et non des screenshots...
Je pense avoir résolu le problème : j'ai remplacé "setInterval(this.secondesCounting, 1000);" par une fonction fléchée "setInterval(() => this.secondesCounting(), 1000);"
Code : Tout sélectionner
<button id="button">Run</button><br><br>
<div id="counter"></div><br><br>
<button id="remove">Remove</button>
Code : Tout sélectionner
class Timer {
constructor() {
this.counter = document.getElementById("counter");
this.button = document.getElementById("button");
this.buttonRemove = document.getElementById("remove");
this.secondes = 13;
this.minutes = 0;
this.current_secs;
this.current_mins;
this.buttonClick();
this.removeClick();
this.ifstorage();
}
ifstorage() {
if (sessionStorage.getItem("Secondes")) {
this.secondes = sessionStorage.getItem("Secondes");
this.minutes = sessionStorage.getItem("Minutes");
this.running();
}
}
removeStorage() {
sessionStorage.clear();
}
storage() {
sessionStorage.setItem("Secondes", this.current_secs);
sessionStorage.setItem("Minutes", this.current_mins);
}
buttonClick() {
this.button.addEventListener("click", () => {
// secondesCounting();
this.running();
});
}
removeClick() {
this.buttonRemove.addEventListener("click", () => {
this.removeStorage();
});
}
secondesCounting() {
if (this.secondes > 0) {
this.secondes--;
this.current_secs = this.secondes;
this.current_mins = this.minutes;
this.addTextContent()
this.storage();
} else if (this.secondes == 0 && this.minutes > 0) {
this.secondes = 59;
this.minutes--;
this.current_secs = this.secondes;
this.current_mins = this.minutes;
this.addTextContent();
this.storage();
} else if (this.secondes == 0 && this.minutes == 0) {
clearInterval();
sessionStorage.clear();
this.counter.textContent = "fin";
}
}
running() {
this.secondesCounting();
setInterval(this.secondesCounting, 1000);
}
addTextContent() {
this.counter.textContent = this.current_mins + ":" + this.current_secs;
}
}
let countdown = new Timer();
-
webmaster
- Administrateur du site
- Messages : 617
- Enregistré le : 28 févr. 2017, 15:19
Message
par webmaster » 01 avr. 2020, 14:27
Oui, c'est la solution en effet
Je vois qu'il y a de la maitrise avec l'écriture de fonction flechée
bravo
-
ben06
- Messages : 4
- Enregistré le : 01 avr. 2020, 03:45
Message
par ben06 » 02 avr. 2020, 16:34
Salut webmaster,
Merci pour ta réponse
Je rencontre maintenant un nouveau problème :
Lorsque le timer fonctionne et que je clique une nouvelle fois sur le bouton, le timer décrémente bizarrement (plus rapidement et de façon saccadée).
Comment pourrais-je régler ça ?
Merci d'avance
-
ben06
- Messages : 4
- Enregistré le : 01 avr. 2020, 03:45
Message
par ben06 » 03 avr. 2020, 17:54
En effet, le problème était bien là.
C'était assez évident d'ailleurs, merci !!!