JavaScript : rendre le Web interactif (école d'ingénieur) · Chapitre 9 · Exercice de TD
La réservation du panier
Programmation asynchrone · niveau 2
Énoncé
Une page affiche « Votre panier est réservé pendant 2:00. » et un bouton « Prolonger de 2 minutes ». Chaque seconde, le temps diminue (« 1:59 », « 1:58 »…) ; à zéro, le message devient « La réservation a expiré : les livres sont remis en rayon. ». Le bouton relance le compte à 2:00. Écrire le script. Que se passe-t-il si l'on oublie d'arrêter l'ancien minuteur avant d'en lancer un nouveau, et que l'on clique deux fois ?
Corrigé
const DUREE = 120; // secondes
const message = document.querySelector("#message");
const bouton = document.querySelector("#prolonger");
let reste;
let minuteur;
// 75 → "1:15" ; 5 → "0:05"
export function formater(secondes) {
const min = Math.floor(secondes / 60);
const sec = String(secondes % 60).padStart(2, "0");
return `${min}:${sec}`;
}
function afficher() {
if (reste > 0) {
message.textContent = `Votre panier est réservé pendant ${formater(reste)}.`;
} else {
message.textContent = "La réservation a expiré : les livres sont remis en rayon.";
}
}
function demarrer() {
clearInterval(minuteur); // un seul minuteur à la fois, même après plusieurs clics
reste = DUREE;
afficher();
minuteur = setInterval(() => {
reste--;
afficher();
if (reste === 0) {
clearInterval(minuteur);
}
}, 1000);
}
bouton.addEventListener("click", demarrer);
demarrer();
Le paragraphe porte role="status", pour que le lecteur d'écran annonce l'expiration. Nous avons vérifié la page dans Chromium avec une horloge simulée : « 1:15 » au bout de 45 s, « 1:59 » une seconde après un double clic sur « Prolonger », le message d'expiration 120 s plus tard. Sans le clearInterval de demarrer, chaque clic ajouterait un minuteur sans arrêter les précédents : après deux clics, trois minuteurs décrémentent reste, le temps défile trois fois trop vite, et les anciens minuteurs, dont on a perdu l'identifiant, ne s'arrêtent plus jamais.
100 % gratuit
La suite du chapitre est sur Adloun
- 11 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.