
Parole che si fondono
Testo, Scroll, SVG
NuovaGratis
Scorri dentro l’anteprima
La giornata dell’eclissi di un osservatorio, nello stile minimal: scendendo, la Luna, solo un contorno sottile, passa davanti a un Sole vermiglio e lo morde in una falce sempre più fina, e tutta la pagina si scurisce con la luce che resta. Alla totalità la Luna si posa al centro, due anelli sottili si disegnano intorno e la pagina è notte; poi riparte e torna il giorno.
Una cartella che funziona da sola: index.html, style.css, script.js e le librerie da CDN. Nelle schede React e Vue la stessa demo è già un componente, che spegne le sue animazioni quando esce dalla pagina.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The eclipse that dims the page</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/full.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- the eclipse day of a made-up observatory, Halo. Scrolling, the Moon, only a thin outline, slides across the Sun
and bites it into a crescent; the more Sun it covers, the darker the whole page gets. At totality the Moon settles
in the middle, a thin vermilion ring draws itself around it and the page is night; then the Moon moves on and
the day comes back. The word of the phase loses weight with the light -->
<main>
<section class="apertura">
<p class="piccolo">Halo Observatory</p>
<h1 class="titolo">For six minutes,<br>the day goes out.</h1>
<p class="piccolo piccolo--tenue">Scroll to bring the Moon across.</p>
</section>
<section class="racconto" data-racconto>
<div class="palco" data-palco>
<header class="testa">
<p class="marchio">Halo</p>
<p class="piccolo piccolo--tenue">Total eclipse, viewing day</p>
</header>
<svg class="cielo" data-cielo aria-hidden="true">
<defs>
<mask id="morso" maskUnits="userSpaceOnUse">
<rect class="morso__tutto" data-morso-tutto fill="#fff"></rect>
<circle data-morso-luna fill="#000"></circle>
</mask>
</defs>
<circle class="sole" data-sole mask="url(#morso)"></circle>
<circle class="corona corona--larga" data-corona-larga></circle>
<circle class="corona" data-corona></circle>
<circle class="luna" data-luna></circle>
<g class="righello" data-righello></g>
</svg>
<div class="fase" aria-live="polite">
<p class="fase__finestra">
<span class="fase__parola" data-fase>Daylight</span>
<span class="fase__parola" data-fase>Partial</span>
<span class="fase__parola" data-fase>Totality</span>
<span class="fase__parola" data-fase>Partial</span>
<span class="fase__parola" data-fase>Daylight</span>
</p>
<p class="lettura">Sun covered <span class="lettura__cifra" data-coperto>0%</span></p>
</div>
</div>
</section>
<section class="apertura apertura--fine">
<h2 class="titolo titolo--medio">Bring a chair.<br>We bring the glasses.</h2>
</section>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/ScrollTrigger.min.js"></script>
<script src="script.js"></script>
</body>
</html>Cambia valori, colori e testi con le manopole e guarda l’animazione rispondere dal vivo. Oppure scrivi tu nel codice. Poi scarica la cartella con le tue modifiche.
29 valori da cambiare
Col connettore di Animorio, Claude Code la prende da qui con tutta la sua guida e la adatta al tuo progetto. Incolla questa richiesta:
Prendi «L’eclissi che spegne la pagina» da Animorio e adattala al mio sitoIl Sole, la Luna, gli anelli e la linea del tempo stanno in un SVG con il viewBox uguale ai pixel del palco fissato (position: sticky, alto 100lvh). Il Sole è un cerchio pieno con una maschera: un rettangolo bianco grande quanto il palco e, sopra, un cerchio nero che si muove con la Luna. Dove c’è il nero il Sole non si vede, quindi la falce viene da sola, giusta a ogni posizione, senza disegnarla. La Luna visibile è solo un contorno sottile e semitrasparente.
La timeline, legata allo scorrimento con scrub SCRUB, porta un numero u da 0 a 1: per quattro passi la Luna arriva, per TOTALITY passi resta ferma al centro, per altri quattro se ne va. Da u si ricavano il posto della Luna sulla sua retta (inclinata di ANGLE gradi), l’orario e la parola della fase. Il passaggio fra due parole cade dove la geometria dice: il primo contatto è quando la distanza fra i centri è uguale alla somma dei raggi.
A ogni fotogramma lo script calcola l’area coperta del Sole con la formula della lente fra due cerchi e la scrive nella percentuale. Il buio è quella copertura alla terza potenza, come il cielo vero che cambia poco finché resta un filo di Sole: con gsap.utils.interpolate mescola il bianco caldo e il quasi nero nella variabile --fondo, e il colore del testo passa dal nero al bianco fra il 40 e il 62 per cento di buio. Lo stesso numero toglie peso alla parola della fase (asse wght) e le dà morbidezza (asse SOFT di Fraunces).
Arrivata al centro, la Luna va oltre di poco più di due pixel e torna con elastic.out: è un secondo valore della timeline sommato al suo posto. Gli anelli sono cerchi con stroke-dasharray lungo quanto la circonferenza, girati di 90 gradi per partire dall’alto: lo stroke-dashoffset va dalla circonferenza a zero e li disegna, poi da zero a meno la circonferenza e la coda insegue la testa finché spariscono. Il secondo parte un attimo dopo.
I quattro orari di TIMES stanno sulla linea alla loro distanza vera, per questo la totalità è un tratto corto; il segno vermiglio cammina sulle ore e i nomi sotto la linea si schiariscono quando l’orario ci passa sopra. Tutte le misure (centro e raggio del Sole, la linea) si ricalcolano a ogni refresh di ScrollTrigger e a ogni resize, anche a metà dell’eclissi.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
SUN | script.js | 0.25 | Il raggio del Sole, come parte dell’altezza del palco. |
MOON | script.js | 1.035 | Quanto la Luna sembra più grande del Sole: più è grande, più largo resta il bordo nero intorno agli anelli. |
ANGLE | script.js | 20 | La pendenza della strada della Luna, in gradi (0 è orizzontale). |
TOTALITY | script.js | 2.2 | Quanto dura la totalità, in passi del racconto (la Luna ne impiega 4 per arrivare). |
TIMES | script.js | ['09:58', '11:24', '11:30', '12:56'] | I quattro orari: primo contatto, inizio e fine della totalità, ultimo contatto. |
SCRUB | script.js | 0.6 | Quanti secondi ci mette il disegno a raggiungere lo scorrimento. |
Per la pagina di un osservatorio, di un planetario o di un evento all’aperto, per un articolo di scienza o per qualunque racconto in cui la pagina deve passare dal giorno alla notte e tornare: un’apertura, un momento sospeso a metà, un ritorno.
Uguale, con misure adattate: il Sole sta al centro in alto e più piccolo, la parola della fase sotto, la linea del tempo in fondo con le scritte più piccole. La Luna entra già da fuori dello schermo.
La Luna non viaggia: cinque quadri fermi (giorno, falce, totalità, falce, giorno) che si danno il cambio con una dissolvenza, con gli anelli già disegnati alla totalità; la pagina si scurisce e si schiarisce piano, le parole della fase si alternano in dissolvenza e il segno sulla linea del tempo salta da un quadro all’altro.
GSAP 3.15.0, ScrollTrigger (GSAP) 3.15.0, Fraunces (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 7,5 KB; le librerie: GSAP + ScrollTrigger 45 KB.
Provata il 19 ottobre 2026
Puoi usarla nei tuoi progetti e in quelli dei tuoi clienti. Non puoi rivenderla né ridistribuirla così com’è. GSAP resta sotto la sua licenza Standard. Licenza completa.
Con l’email e la password del tuo account.
oppure con l’email
Hai fatto l’accesso come .
Con l’account scarichi lo zip di ogni animazione e di ogni pacchetto, gratis.