
Il nastro nel bottone
Hover, SVG, Testo
NuovaGratis
Una meridiana vista dall'alto, un ventaglio di tacche sottili e uno gnomone: il puntatore è il sole, l'ombra gira e si allunga su due molle, le cifre dell'ora scattano una a una e sotto l'ora si scrive in parole, half past four, lettera per lettera. Stile minimal.
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 sundial that tells the time</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/full.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/instrument-sans@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- a sundial seen from above: a fan of hairline ticks and a gnomon. The pointer is the sun: its shadow swings
and stretches on a spring, the time is written underneath in words and its digits click over -->
<main class="stage" data-stage>
<header class="top">
<span class="top__name">Meridian</span>
<span class="top__note">A sundial, seen from above</span>
</header>
<div class="dial" role="slider" tabindex="0" aria-label="Time of day" aria-valuemin="5" aria-valuemax="19" data-dial>
<svg class="dial__svg" viewBox="-500 -490 1000 720" aria-hidden="true">
<defs>
<linearGradient id="shade" gradientUnits="userSpaceOnUse" x1="0" y1="0" x2="0" y2="-300" data-shade>
<stop offset="0" stop-opacity="0.82"></stop>
<stop offset="0.7" stop-opacity="0.42"></stop>
<stop offset="1" stop-opacity="0.08"></stop>
</linearGradient>
</defs>
<path class="rim" data-rim></path>
<path class="path" data-sunpath></path>
<path class="ticks" data-ticks></path>
<path class="ticks ticks--hours" data-hours></path>
<path class="ticks ticks--now" data-now></path>
<g data-shadow-turn><path class="shadow" fill="url(#shade)" data-shadow></path></g>
<path class="gnomon" data-gnomon></path>
<path class="sun" data-sun></path>
</svg>
<div class="labels" aria-hidden="true" data-labels></div>
</div>
<div class="read" aria-hidden="true">
<div class="read__row">
<span class="digits" data-digits>
<span class="slot" data-slot></span><span class="slot" data-slot></span><span class="digits__colon">:</span><span class="slot" data-slot></span><span class="slot" data-slot></span>
</span>
<span class="read__date" data-date>June 21</span>
</div>
<div class="words" data-words></div>
</div>
<p class="hint">Move the sun across the page</p>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.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.
23 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 «La meridiana che dice l'ora» da Animorio e adattala al mio sitoSu una meridiana orizzontale l'ombra dello stilo all'ora t fa con la linea di mezzogiorno un angolo che si ricava da tan(angolo) = sin(latitudine) × tan(H), dove H è l'angolo orario del sole, 15 gradi per ogni ora da mezzogiorno. Con atan2(sin(lat)·sin H, cos H) l'angolo è continuo anche oltre le sei, quindi le tacche vanno dalle 5 alle 19 e si stringono da sole intorno a mezzogiorno. L'SVG ha un viewBox di 1000 per 720 con lo gnomone nell'origine; ogni tacca è un segmento verso il bordo (raggio 420), in due path: le ore più scure, il resto più chiaro.
La posizione orizzontale del puntatore diventa l'ora (destra l'alba, sinistra il tramonto), quella verticale la stagione, cioè la declinazione del sole fra +23,44 e −23,44 gradi. Da ora e stagione viene l'altezza del sole, sin(h) = sin(lat)·sin(dec) + cos(lat)·cos(dec)·cos(H), e la lunghezza dell'ombra di uno gnomone alto NODUS è NODUS / tan(h), con il sole mai sotto i 5 gradi perché l'ombra resti sulla meridiana. Il giorno accanto alle cifre viene dalla stessa declinazione, letta sulla strada da dicembre a giugno.
L'ora che l'ombra mostra va verso quella chiesta dal sole su TIME_SPRING, integrata a mano sul ticker di GSAP con il passo limitato a 1/30 di secondo; la lunghezza va verso quella del momento su LENGTH_SPRING, più morbida, così quando l'ombra gira veloce si allunga e si accorcia con un piccolo ritardo e un filo di rimbalzo. L'ombra è un cuneo disegnato verso l'alto dentro un gruppo ruotato: il gradiente in userSpaceOnUse ruota con lei e sfuma sempre verso la punta. Le tacche vicine hanno una molla ciascuna, che le allunga verso il centro in proporzione alla velocità (LEAN).
Ogni cifra sta in una finestrella con overflow nascosto: la cifra nuova entra dal basso (o dall'alto se il tempo torna indietro) con back.out e la vecchia esce dall'altra parte sfumando. Se una cifra cambia di nuovo prima di 0,24 secondi, scatta senza rotolare, così quando il tempo corre veloce non si accavallano. Le parole si arrotondano ai cinque minuti; si riscrivono quando la frase resta uguale per 0,22 secondi, o al massimo una volta ogni 0,85 secondi mentre l'ombra corre. Ogni lettera è uno span con font-weight: calc(var(--wt) + var(--lw)): il contenitore dà il peso della velocità (WEIGHT), la lettera che atterra porta --lw da −300 a 0.
Una timeline GSAP disegna il bordo e il cammino del sole aprendoli dal centro, fa crescere ogni tacca con un back.out quando il disegno la raggiunge, alza lo gnomone con elastic.out, poi porta il sole dalle 5 a START: le molle fanno il resto. Il mouse guida il sole su tutta la pagina, il dito mentre lo trascina; la meridiana è un role=slider con le frecce. Dopo 2,4 secondi senza nessuno, una gsap.delayedCall porta il sole avanti di mezz'ora ogni 1,5 secondi.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
TIME_SPRING | script.js | [150, 17] | La molla con cui l'ombra gira: quanto è rigida e quanto è frenata (meno freno, più rimbalza). |
LENGTH_SPRING | script.js | [210, 11] | La molla con cui l'ombra si allunga e si accorcia: quanto è rigida e quanto è frenata. |
NODUS | script.js | 140 | Quanto è alto lo gnomone (la meridiana è larga 1000): più alto, ombre più lunghe. |
LEAN | script.js | 18 | Quanto si allungano verso il centro le tacche vicine all'ombra mentre corre. |
WEIGHT | script.js | [540, 220] | Il peso delle parole ferme e mentre l'ombra corre (da 100 a 900). |
WIDTH | script.js | [100, 76] | La larghezza delle cifre ferme e mentre contano veloci (da 75 a 100). |
START | script.js | 16.5 | L'ora su cui si posa l'apertura, dalle 5 alle 19 (16.5 sono le quattro e mezza). |
WANDER | script.js | true | Il sole va avanti da solo, di mezz'ora in mezz'ora, quando nessuno muove il puntatore. |
Per dire un orario in modo caldo e leggibile: gli orari di apertura di un ristorante o di un bar (a che ora si pranza, quando si chiude), l'ora del check-in di un hotel o di una casa vacanza, l'ora di un concerto o di un evento, il tramonto da una terrazza. Funziona dove l'ora è il messaggio e c'è spazio per una scena sola; per un orario fra tanti dati basta il testo.
Le stesse animazioni a misure adattate: la meridiana è larga quanto lo schermo, i numeri delle ore e le cifre un poco più piccoli, le parole scalano con la larghezza. Il sole segue il dito mentre lo trascina in qualunque punto della pagina (lì la pagina non scorre, è una scena sola) e si ferma quando si alza; poi riparte da solo.
Niente molle, niente tacche che si allungano, niente cifre che rotolano e niente sole che va da solo: l'ombra va subito all'ora e alla sua lunghezza, le cifre cambiano e le parole si scambiano con una breve dissolvenza. All'apertura tutto compare in dissolvenza già al suo posto, alle quattro e mezza.
GSAP 3.15.0, Fraunces (font variabile) 5.3.0, Instrument Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 9,6 KB; le librerie: GSAP 28 KB.
Provata il 15 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.