Utilitaires✨ Premium

Countdown Timer

Compte à rebours en cartes qui basculent, jusqu'à une vraie date de fin : il s'arrête à zéro, affiche « Terminé » et prévient votre code.

JSAnimationTimer

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Utilitaires comprend 43 effets, dont 3 gratuits. Découvrir la catégorie →

3 exemples d'usage

Ouverture d'une billetterie de festival — jours, heures, minutes, secondes en grand — Countdown Timer exemple 1

① Ouverture d'une billetterie de festival — jours, heures, minutes, secondes en grand

QuandEn haut de la page du festival Ondrivel, le compte à rebours occupe le centre : il reste 12 jours avant l'ouverture des ventes. À zéro, il afficherait « La billetterie est ouverte ».
PourquoiUne attente de plusieurs jours a besoin d'une carte « jours » : il suffit de l'ajouter dans le HTML, le script la prend en compte. En grand, la bascule de la seconde donne du rythme à une page sinon immobile.
RéglagesCarte data-cdt-unit="d" ajoutée en tête, cartes de 74×86 px et chiffres de 2,6 rem par le CSS de la scène, couleurs du festival. La fin est posée par setEnd() à 12 j 7 h 42 min de l'affichage de la scène, pour que la capture montre toujours les mêmes nombres.
Chrono d'une manche de quiz — fin de manche qui révèle la réponse — Countdown Timer exemple 2

② Chrono d'une manche de quiz — fin de manche qui révèle la réponse

QuandSur l'écran de la question 7, le chrono minutes:secondes descend ; à 00:00 il s'arrête, « Temps écoulé » s'affiche dessous et la bonne réponse passe au vert, la réponse choisie au rouge.
PourquoiL'événement cdt-done suffit pour enchaîner la suite du jeu : pas besoin de surveiller le temps à côté. Seules deux cartes sont présentes, le compte se fait donc en minutes et secondes.
RéglagesCartes m et s seulement, 00:30 dans le HTML, data-cdt-done="Temps écoulé". Pour la capture, la scène appelle setEnd() 1,6 s avant la fin ; elle écoute cdt-done pour colorer les réponses.
Liste de lots aux enchères — un petit compte à rebours par lot — Countdown Timer exemple 3

③ Liste de lots aux enchères — un petit compte à rebours par lot

QuandSous chaque lot de la vente Vendrevaux, un compte à rebours réduit indique le temps restant. Le fauteuil en rotin arrive à zéro : son compte se fige, « Vente close » s'affiche et la ligne se marque.
PourquoiTrois instances indépendantes sur la même page, chacune avec sa propre fin. Réduites (cartes de 28×30 px, unités en ligne), elles restent lisibles dans une ligne de liste.
RéglagesUne racine par lot, cartes h, m, s, deux-points masqués et unités écrites à côté des chiffres par le CSS de la scène, data-cdt-done="Vente close". Fins posées par setEnd() (1,3 s, 1 h 12, 5 h 22) ; la ligne réagit à cdt-done.

Comment ça marche

Chaque chiffre est une carte .cdt-card coupée en deux moitiés ; quand la valeur change, la moitié haute pivote de 90° en 0,3 s (cdt-flip-top) avant que le nouveau nombre ne s'inscrive. Les unités affichées sont celles des cartes présentes dans le HTML, repérées par data-cdt-unit : d (jours), h, m, s. La plus grande unité garde le reste : sans carte « jours », 26 heures s'affichent 26:00:00.

La fin se règle avec data-cdt-end, une date ISO (2026-12-31T20:00:00+01:00 ; sans fuseau, c'est l'heure locale du visiteur). Sans cet attribut, le compte part de la durée écrite dans les cartes au chargement de la page (12:34:56 par défaut). Le temps restant est recalculé à partir de l'horloge à chaque seconde : un onglet resté en arrière-plan ne prend pas de retard.

À zéro, le compte s'arrête sur 00:00:00. La racine reçoit la classe cdt-done, les deux-points cessent de clignoter, le texte de data-cdt-done s'affiche sous les cartes et l'événement cdt-done est envoyé sur la racine. root.fx0738.setEnd(date) relance le compte vers une autre fin (objet Date, nombre de millisecondes ou texte ISO). Chaque racine a son propre minuteur.

Accessibilité

  • Temps lisible, jamais bavard : les cartes sont masquées aux lecteurs d'écran (aria-hidden), un texte caché role="timer" donne « 12 heures 34 minutes 56 secondes ». Le rôle timer n'est pas annoncé de lui-même : on le lit quand on veut, sans annonce chaque seconde.
  • Fin annoncée une fois : le message de data-cdt-done est écrit dans une zone role="status", lue poliment une seule fois.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, les chiffres changent sans bascule et les deux-points restent fixes ; le décompte continue normalement.
  • Pas un chronomètre légal : l'heure vient de l'ordinateur du visiteur. Pour une échéance qui compte (fin d'enchère, clôture d'inscriptions), c'est votre serveur qui fait foi ; le compte à rebours n'est qu'un affichage.

Compatibilité navigateur

JavaScript sans dépendance (Date.parse, setTimeout, CustomEvent, padStart) et une animation CSS en 3D légère (perspective, rotateX). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5 (Playwright) : deux copies (durée du HTML et vraie date de fin), code collé deux fois, arrêt à zéro avec l'événement, setEnd à 26 h, 390 px, mouvement réduit, page anglaise, aucun nom ajouté sur window, 0 erreur. Le WebKit de Playwright aplatit les effets 3D : la bascule n'a pas été vérifiée à l'œil dans Safari.

Chrome 57+✓ Complet (mesuré)
Firefox 48+✓ Complet (mesuré)
Safari 10+✓ Décompte mesuré dans WebKit ; bascule 3D non vérifiée
Edge 79+✓ Complet (moteur Chromium)
Mobile iOS 10+✓ Moteur WebKit, non vérifié sur appareil
Android Chrome 57+✓ Complet (moteur Chromium)

Sans JavaScript, les cartes affichent la valeur écrite dans le HTML, immobile. Une date data-cdt-end mal écrite est ignorée : le compte part alors de la durée des cartes.

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0738-root" data-cdt-end="2026-12-31T20:00:00+01:00" data-cdt-done="Terminé">
  <div class="cdt-board" aria-hidden="true">
    <div class="cdt-unit">
      <div class="cdt-card" data-cdt-unit="h">
        <div class="cdt-card-inner"><div class="cdt-front">12</div><div class="cdt-back">12</div></div>
      </div>
      <span class="cdt-label">Heures</span>
    </div>
    <span class="cdt-sep">:</span>
    <!-- même bloc pour data-cdt-unit="m" et "s" (et "d" en tête pour les jours) -->
  </div>
  <p class="cdt-sr" role="timer"></p>
  <p class="cdt-status" role="status"></p>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Date de fin (HTML — data-cdt-end) absent : durée écrite dans les cartes Date ISO avec fuseau (2026-12-31T20:00:00+01:00) pour une échéance identique pour tous les visiteurs.
Unités (HTML — cartes data-cdt-unit) h, m, s Ajoutez une carte d pour les jours, retirez h pour un chrono minutes:secondes. La plus grande unité garde le reste.
Message de fin (HTML — data-cdt-done) « Terminé » Texte affiché sous les cartes et annoncé une fois à zéro : « Vente close », « Les inscriptions sont ouvertes »…
Nouvelle fin (JS — root.fx0738.setEnd(date)) — Relance le compte vers une autre date (Date, millisecondes ou texte ISO), par exemple une fin reçue de votre serveur après le chargement.
Réagir à la fin (JS — événement cdt-done) — root.addEventListener('cdt-done', …) : afficher un bouton, recharger un prix, passer à la question suivante.
Taille des cartes (CSS — .cdt-card, .cdt-front) 60×70px, chiffres 2rem Agrandissez ensemble la carte et la taille des chiffres ; les deux moitiés suivent.
Couleurs (CSS — .cdt-board, .cdt-sep, .cdt-status) fond #1a1a2e, deux-points #6366f1, message #a5b4fc Teintes de votre charte ; l'état terminé se règle via .cdt-done.

FAQ

Oui si la date de fin porte un fuseau (+01:00, Z). Sans fuseau, elle est lue à l'heure locale de chacun : 20 h à Paris et 20 h à Montréal ne tombent pas au même instant. Le calcul utilise l'horloge de l'ordinateur du visiteur ; une horloge déréglée décale l'affichage, pas votre échéance réelle.
Le compte affiche 00:00:00 dès le chargement, passe en état terminé, montre le message de data-cdt-done et envoie cdt-done. Il ne repart jamais tout seul ; pour relancer, appelez setEnd().
Oui : la carte des heures garde tout le reste, par exemple 126:05:12. Trois chiffres tiennent tout juste dans la carte de 60 px ; donnez-lui un min-width de 76 px pour respirer. Pour une attente de plusieurs jours, une carte d se lit mieux.