Hover✨ Premium

Newton's Cradle Loop

Cinq pendules DOM alignés oscillent en échangeant l'élan selon la mécanique classique : lever un pendule d'un côté, relâcher, et celui de l'autre côté repart du même angle. La séquence repart automatiquement toutes les quelques secondes.

JSPendulumEnergy

Mis à jour le

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

3 exemples d'usage

Métronome visuel — sidebar d'un éditeur audio (DAW) — Newton's Cradle Loop exemple 1

① Métronome visuel — sidebar d'un éditeur audio (DAW)

QuandDans Noxvel, le panneau latéral affiche le tempo (120 BPM) avec le berceau de Newton comme métronome visuel. Pendant la lecture des pistes, le musicien surveille le balancement périphériquement pour garder le rythme.
PourquoiLe berceau oscille naturellement au rythme de la physique classique : sa cadence régulière, sa relance automatique et son silence visuel entre les échanges d'élan correspondent exactement à l'attente d'un métronome. Pas d'animation codée — c'est la physique qui bat la mesure.
RéglagesInstance 148 × 200 px dans le panneau latéral. Bobs cyan (#22d3ee/#0891b2) pour se distinguer des pistes de la timeline. Stage height:200px. Préfixe k384-.
Fond animé hero — agence marketing « Momentum » — Newton's Cradle Loop exemple 2

② Fond animé hero — agence marketing « Momentum »

QuandSur la page d'accueil de l'agence Moven, le berceau de Newton occupe le fond en grand format et en semi-transparence. Les pendules illustrent silencieusement la promesse « chaque action génère un élan » pendant que le visiteur lit l'accroche.
PourquoiL'animation est à la fois métaphore et démonstration : le visiteur voit l'élan se transmettre d'un pendule à l'autre, ce qui rend le concept abstrait de l'agence immédiatement tangible. La faible opacité laisse le texte toujours prioritaire.
RéglagesRacine absolute inset:0, fond transparent, opacity:.18. Stage height:360px. Rangée agrandie (transform:scale(1.8), transform-origin:top center). Bobs violet #7c3aed. Overlay texte z-index:10.
Écran de démarrage — animation de boot d'une appli — Newton's Cradle Loop exemple 3

③ Écran de démarrage — animation de boot d'une appli

QuandAu lancement de Pulsio, l'écran de boot affiche le logo, le message CHARGEMENT et le berceau de Newton centré. L'animation boucle automatiquement pendant les 2-3 secondes du chargement, puis l'interface principale s'affiche.
PourquoiUn spinner rotatif est attendu et ennuyeux ; le berceau de Newton capte l'attention par son rythme imprévisible (séquence d'échanges, silence, relance). L'animation boucle seule sans code de minuterie, ce qui simplifie l'intégration.
RéglagesInstance 200 × 220 px centrée. Bobs indigo par défaut. Indicateur de progression en points. Numéro de version en bas, discret. Zone d'affichage isolée, pas de fond plein différent du reste.

Comment ça marche

Cinq div.nc384-wire (fils) portent chacun un div.nc384-bob (boule). Chaque fil pivote autour de son point d'attache (transform-origin: center top) via un angle stocké dans un tableau JavaScript. La physique est un pendule simple : à chaque image, velocity += -G × sin(angle) × f avec G = 0,004, puis velocity *= 0.999^f (amortissement minimal) et angle += velocity × f. Le step est normalisé à 60 fps : f = dt / 16.67.

L'échange d'élan est simulé par une bascule : quand le pendule de gauche revient à l'angle 0, sa vitesse est transférée au pendule de gauche suivant s'il était au repos, ou vice-versa à droite. Cette approximation suffit pour l'illusion visuelle. La séquence de lancement est pré-définie (levee compte à rebours) : toutes les 5 s environ, l'angle du pendule de gauche est initialisé à 0,5 rad et la séquence repart. Un IntersectionObserver met la boucle en pause hors écran. Sous mouvement réduit, les pendules sont affichés fixes à angle 0.

Accessibilité

  • Mouvement réduit : sous prefers-reduced-motion: reduce, la boucle ne démarre pas et les cinq pendules s'affichent verticaux et fixes. L'état est lisible.
  • Clavier et toucher : l'effet n'est pas interactif. Les pendules oscillent seuls ; rien ne se passe au clic, au toucher ou au clavier.
  • Rôle décoratif : la zone n'a pas de rôle ARIA. Si elle illustre un contenu (un titre, un concept), ajoutez le texte à côté de la racine et aria-hidden="true" sur .nc384-stage.

Compatibilité navigateur

DOM pur et CSS, aucune dépendance. IntersectionObserver disponible depuis Chrome 51, Firefox 55, Safari 12.1. Physique par requestAnimationFrame normalisée sur le temps écoulé. Non vérifié sur Safari réel ; attendu complet.

Chrome 51+✓ Complet (mesuré)
Firefox 55+✓ Complet (mesuré)
Safari 12.1+✓ Attendu complet (non mesuré)
Edge 79+✓ Complet (mesuré)
Mobile iOS 12.2+✓ Complet (non mesuré)
Android Chrome 51+✓ Complet (non mesuré)

Sans JavaScript, les pendules s'affichent verticaux et fixes. Sans IntersectionObserver, la boucle tourne aussi hors écran.

Le code

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

index.html — structure
<div class="fx-0384-root">
  <div class="nc384-stage">
    <div class="nc384-row"></div>
  </div>
</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
Nombre de pendules (JS — créer N fils et boules) 5 3 pendules donne un rendu plus épuré ; 7 un effet plus riche. L'échange d'élan devient moins précis au-delà de 7 dans cette implémentation simplifiée.
Longueur des fils (CSS — .nc384-wire { height: 150px }) 150 px 200 px ralentit l'oscillation (période plus longue) ; 80 px l'accélère.
Angle initial (JS — pendulums[0].angle = 0.5) 0,5 rad (≈ 29°) 0,8 rad (≈ 46°) donne des oscillations plus amples et plus rapides ; 0,3 un balancement presque invisible.
Amortissement (JS — velocity *= Math.pow(0.999, f)) 0,999 — quasi sans perte 0,995 fait s'arrêter les pendules en quelques secondes ; 0,9999 les garde en oscillation très longtemps.
Couleur des fils et boules (CSS — .nc384-wire, .nc384-bob) gradient indigo, boules indigo Restreignez à une teinte unie pour un aspect minimaliste ; utilisez des couleurs par index pour des boules multicolores.

FAQ

L'oscillation de chaque pendule est gouvernée par l'équation du pendule simple (force de rappel proportionnelle au sinus de l'angle). L'échange d'élan entre boules est une approximation : le transfert se fait à l'instant où le pendule central passe à l'angle 0, pas par détection de collision. L'illusion visuelle est convaincante mais ce n'est pas un moteur physique rigoureux.
Oui, en modifiant l'état interne. Dans le code vendu, les pendules sont stockés dans le tableau pendulums (variable locale à la fermeture). Modifiez leurs propriétés dans les lignes du script : pendulums[0].angle = 0.5; pendulums[0].velocity = 0; relance la séquence depuis la gauche. Pour déclencher depuis l'extérieur de l'effet, exposez d'abord la référence ou émettez un événement personnalisé sur la racine.
L'amortissement (velocity *= 0.999^f) retire une infime fraction d'élan à chaque image. Sur un écran 60 Hz, l'oscillation dure environ 15 à 20 s avant de devenir imperceptible, puis le script relance automatiquement.