Adloun

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

Exercice suivant et tuteur

Sans compte : le cours et le premier QCM. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →