Tu n'as pas stocké de manière persistante la valeur du compte à rebours en cours (session storage, local storage,...), donc au rechargement de la page tout reprend de zéro. C'est ce que dit ton code : au chargement de la page, déclenche le compte à rebours à partir de 60...donc c'est ce qu'il fait chaque fois que ta page est rechargée. Il faut stocker de manière persistante cette donnée et chercher à voir si elle existe et la récupérer au début avant de lancer le compte à rebours.
/!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
Évidemment, rien de ce qui se passe coté client n'est sécurisé.
Pour l'utiliser, Lucky13 a donné une source, mais google aurait très bien fait l'affaire. Si tu as du mal à t'en servir, je te conseille de revoir le cours de base sur le JS.
/!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
Ben...tu stockes la chaine de caractères "timer" dans la clef "saver" du sessionStorage. Donc tu ne stockes pas la date (mais de toute façon la ligne 2 n'a aucun sens et doit exploser une erreur), mais en plus, même si tu la stockais, tu ne cherches à la récupérer nul part. Tu recommences toujours à 60 ligne 20 et tu cherches à stocker 60. De plus, comme la fonction appelée régulièrement ne met pas non plus à jour le session storage, ça ne risque pas de fonctionner.
/!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
Alors à priori, il faut commencer à chercher si la clé stockée en sessionStorage existe, logique, c'est la 1ère chse à faire.
Si OUI
Si clé <= 0 alors la remettre à 60 (enfin selon ce que tu veux faire)
Sinon duration = valeur de la clé
Si NON alors duration = 60 et on créé la clé en sessionStorage
La ligne 20 tu passes toujours en paramètre le valeur de 60, il faut passer en valeur selon la condition NON ou OUI et Si / Sinon la duration = clé ou 60
Bref écrire en pseudo-code (écrire en littéral Francais ou Anglais) simplifie la mise en place de la logique / conception.
ps: je laisse Genroame corriger au cas ou, j'y vois mal sur mon mobile
Je ne comprends pas vraiment ce système de clé, il y a la valeur et la clé mais quels sont les différences? Je me suis renseigné un peu partout, même sur les forums anglais et je ne trouve pas ce que je recherche :/
Bein c'est comme un tableau[] tu peux avoir les indices ou des clés.
ex de l'article :
sessionStorage.setItem("couleur","vert")
Stockage: Le 1er argument "couleur" est la clé qui a pour valeur "vert"
var couleur = sessionStorage.getItem("couleur");
On affecte à la variable var = couleur le contenu de la clé, donc tu obtiens "vert"
Du coup var couleur = "vert" au final, dans ton cas tu aurais var duration = parseInt("60",10); -> la je caste un string en entier (int)
Pour toi ça ressemblerait à un truc comme ceci :
if(typeof sessionStorage!='undefined') {
// Récupération de la valeur dans web storage
var duration = sessionStorage.getItem('duration');
// Vérification de la présence du compteur
if(duration!=null) {
if(duration > 0){
// Si >= 0 , on convertit en nombre entier la chaîne de texte qui fut stockée
duration = parseInt(duration,10);
}
else duration = 60; // on remet le compteur à 60
// appeler la fonction
startGRBTimer(duration, display)
}
else{
sessionStorage.setItem('duration', '60'); // on crée la clé en sessionStorage car elle n'existait pas (1er chargement de la page)
duration = 60;
startGRBTimer(duration, display) // appeler la fonction
}
} else {
alert("localStorage n'est pas supporté");
}
Je te laisse gérer l'argument "display"
je tape sur un mobile, 8 fois que j'essais d'écrire le code donc vérifier les erreurs mais le principe est la...
Je me répète, mais sans vouloir être méchant, si la notion de clef->valeur n'est pas claire pour toi, il va falloir revoir tes bases du JS, avec des structures de données comme les Maps ou les objets littéraux. Et possiblement pas sur OC, où le cours est obsolète. Si tu n'as pas les connaissances pour comprendre ce que tu fais, te donner du code tout chaud prêt à l'emploi dans la main ne te fera aucun bien.
Pour tout le bloc de conditions que tu as écrit Lucky13, on peut le résumer à ça:
// Récupération de la valeur dans web storage
let duration = sessionStorage.getItem('duration') || 60;
duration = duration >= 0 ? duration : 60;
// appeler la fonction
startGRBTimer(duration, display)
On récupère la valeur dans le sessionStorage, ou 60 si aucune n'est stockée. Puis on la reset à 60 si elle est négative.
- Edité par Genroa 16 août 2018 à 22:30:05
/!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
Vi mais déjà qu'il n'a pas les bases, si tu en plus tu utilises une ternaire et un let à la place d'un var...
Puis je vérifie le support du webStorage, même si de nos jour cela semble acté.
Pour le reste tu as raison, sans les bases pas la peine d'aller plus loin, il faut revoir le cours et pratiquer un peu avant de se lancer dans un projet, et donner une solution ne lui sera pas bénéfique puisqu'il ne pourra pas le modifier par la suite.
Le storage est standard sans exception partout. Mais je ne remplaçais que le bloc conditionnel lié à la récupération. S'il le veut, il peut toujours faire la vérification avant bien sûr (mon avis reste que s'il n'a pas les bases pour utiliser ce genre de choses, il ne devrait pas en être à toucher du web storage je pense, ni même du JS dans le DOM. Les bases du JS ne semblent pas encore solides)
/!\ Si je cesse de répondre c'est parce que vous êtes venus poster sans avoir suivi les cours de base sur le sujet. /!\
J'ai finalement réussi, en vous remerciant grandement!
Excellente journée à vous.
Le countdown reprend après rafraîchissement
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Voici ce que j'ai essayé, ça n'a pas l'air de fonctionner, où est l'erreur?