
Il pulsante da far scorrere
Pulsanti, Fisica, Transizioni
NuovaGratis
Il meteo di una città di mare in un widget il cui sfondo è il cielo vero dell'ora scelta, calcolato come fa l'aria: la luce del sole diffusa lungo ogni linea di vista su una Terra tonda, le nuvole illuminate marciando verso il sole, il mare che specchia tutto con la scia del sole. Scorrendo le ore il giorno passa come in un time-lapse: il sole scende lungo il suo arco e affonda nel mare, le nuvole corrono col vento, arriva la pioggia, escono le stelle, all'alba la nebbia si accende d'oro e si alza.
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 weather hour by hour</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/onest@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the weather of a seaside town hour by hour: the background is the sky of the hour chosen, worked out the way
the air does it (sunlight scattered along every line of sight, clouds lit from the sun, the sea mirroring it
all), and scrolling the hours runs the day like a time-lapse -->
<section class="sky" aria-labelledby="sky-place" data-sky data-autoclic>
<canvas class="sky__canvas" aria-hidden="true" data-canvas></canvas>
<header class="now" data-now>
<h2 class="now__place" id="sky-place" data-place></h2>
<p class="now__when" data-when></p>
<p class="now__temp"><span data-temp></span><span class="now__deg" aria-hidden="true">°</span><span class="sr"> degrees</span></p>
<p class="now__cond" data-cond></p>
<p class="now__range" data-range></p>
</header>
<div class="panel">
<dl class="facts">
<div class="fact">
<dt>
<svg class="fact__icon fact__wind" viewBox="0 0 16 16" aria-hidden="true" data-wind-icon><path d="M8 2.2v11.6M8 2.2 4.4 5.9M8 2.2l3.6 3.7"/></svg>
<span class="sr">Wind</span>
</dt>
<dd data-wind></dd>
</div>
<div class="fact">
<dt>
<svg class="fact__icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 1.9c2.2 3 4.3 5.4 4.3 8a4.3 4.3 0 0 1-8.6 0c0-2.6 2.1-5 4.3-8Z"/></svg>
<span class="sr">Chance of rain</span>
</dt>
<dd data-chance></dd>
</div>
<div class="fact">
<dt>
<svg class="fact__icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M1.4 8c1.7-2.9 4-4.4 6.6-4.4s4.9 1.5 6.6 4.4c-1.7 2.9-4 4.4-6.6 4.4S3.1 10.9 1.4 8Z"/><circle cx="8" cy="8" r="2.1"/></svg>
<span class="sr">Visibility</span>
</dt>
<dd data-vis></dd>
</div>
</dl>
<div class="hours" role="slider" tabindex="0" aria-label="Forecast hour" data-hours>
<span class="hours__lens" aria-hidden="true"></span>
<ol class="hours__track" aria-hidden="true" data-track></ol>
</div>
</div>
</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/Draggable.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/InertiaPlugin.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.
282 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 «Il meteo ora per ora» da Animorio e adattala al mio sitoPer 64 altezze della linea di vista, più fitte vicino all'orizzonte, lo script avanza in 16 passi attraverso l'aria di una Terra tonda (6360 km di raggio, 60 km d'aria) e somma a ogni passo la luce del sole diffusa dalle molecole (Rayleigh, l'azzurro) e dalla foschia (Mie), indebolita lungo la strada dall'aria, dalla foschia e dall'ozono. Rayleigh e Mie restano separati, così ogni punto del cielo li moltiplica solo per la sua funzione di fase, cioè per il suo angolo col sole; la tabella si rifà solo quando cambia l'ora. La Terra nasconde il sole all'aria bassa: dopo il tramonto il cielo passa dal rosso al malva e al blu da solo, con l'ombra della Terra sopra l'orizzonte, e l'ozono tiene azzurro il cielo del crepuscolo.
Le nuvole stanno su uno strato a 1,6 km: ogni punto del cielo lo incontra in un punto (x, z), dove un rumore frattale che si ripete senza cuciture, tagliato dalla copertura dell'ora, dice quanta nuvola c'è. Dove un punto della griglia copre molti texel le ottave fini si tolgono, e la densità si calcola anche ai quattro angoli di ogni punto e si fa la media, così i bordi non vengono a scalini. La luce: tre passi verso il sole attraverso lo strato dicono quanto la nuvola è in ombra; da sotto si vede il sole attraverso i bordi sottili (fase di Henyey-Greenstein, il bordo d'argento), la luce sparsa dentro (più grigia dove è spessa), la base accesa da sotto quando il sole è basso, il cielo e, di notte, la luce della città sulle nuvole sopra di lei. Lontano la foschia si mette davanti.
Ogni punto del mare sa a che distanza sta da una camera 15 metri sopra l'acqua: lì la pendenza delle onde viene da due treni di increspature che vanno col vento, e la direzione riflessa prende il cielo da quella stessa tabella, col peso di Fresnel (Schlick). Dove le onde sono più piccole di un punto si usa la loro media, che inclina lo specchio verso un cielo più alto. La scia del sole è la probabilità che le faccette delle onde mandino il sole all'occhio (Beckmann, con la larghezza di Cox e Munk data dal vento); sopra, i luccichii nitidi si accendono e si spengono dove la scia è forte.
La nebbia è uno strato spesso 120 metri attraversato a passi fini, illuminata dal sole (d'oro all'alba, più forte dal suo lato) e da tutto il cielo, e il suo spessore cambia a banchi che vanno alla deriva. La pioggia sono tende grigie sotto le nuvole lontane (la densità presa lungo la linea di vista sotto la base) e strisce oblique per il vento da vicino. Le stelle hanno un posto fisso sulla sfera e girano attorno al polo con le ore: la latitudine, che resta dentro il codice, viene dall'altezza del sole a mezzogiorno e dalla lunghezza del giorno. La luna è una falce illuminata dal lato in cui sta il sole, con la luce cinerea sulla parte buia.
Il cielo si calcola su una griglia di DETAIL pixel per punto (circa 10.000 punti) e si allarga liscio, il mare su un'altra griglia, così l'orizzonte resta netto. La luce è lineare: un'esposizione che si apre quando la luce cala (l'occhio si adatta, ma non del tutto), la curva filmica ACES e la gamma sRGB in una tabella sola. Sopra si disegnano nitidi il sole col suo alone, la luna, le stelle, i luccichii e la pioggia. L'inchiostro delle scritte guarda la luminosità dietro di loro (e il tratto più chiaro sotto il vetro), con due soglie per non tremare, e gira in un terzo di secondo; il vetro prende la tinta del mare scurita.
La striscia è un Draggable con l'inerzia che si ferma su un'ora; la sua posizione è il tempo, interpolato fra un'ora e l'altra, quindi il cielo si muove mentre si trascina. Dove sono le nuvole: il vento sommato ora dopo ora (tornando indietro tornano le stesse nuvole) più la deriva di chi guarda. Coi tasti è uno slider (frecce, Pagina su e giù, Inizio, Fine) che dice a voce l'ora, il cielo, la temperatura, la pioggia, il vento e la visibilità; la rotella scorre le ore e alle estremità lascia scorrere la pagina. Un clic da script (detail 0, l'anteprima della libreria) corre al momento bello dopo: tramonto, sera, pioggia, notte, nebbia, alba, mattina, adesso.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
PLACE | script.js | 'Larkmouth' | La città. |
DAYS | script.js | ['Tuesday', 'Wednesday'] | Oggi e domani: il nome di domani compare a mezzanotte nella striscia delle ore. |
NOW | script.js | 14 | L'ora di adesso: le ore prima di lei sono il mattino passato, più tenui. |
SUNSET | script.js | '18:49' | L'ora del tramonto. |
SUNRISE | script.js | '07:43' | L'ora dell'alba. |
SUN_HEIGHT | script.js | 33 | Quanto sale il sole a mezzogiorno, in gradi: con l'alba e il tramonto dà tutto il suo arco (e il cielo delle stelle). |
HOURS | script.js | [[11, 'fogClearing', 13, 0, 9, 200, 3], …] | Le previsioni: l'ora, il cielo (un nome di SKIES), la temperatura, la probabilità di pioggia in %, il vento in km/h, da dove soffia in gradi e quanto lontano si vede in km. Dopo mezzanotte l'orologio riparte e la striscia continua nel giorno dopo. |
SKIES | script.js | { sunny: ['Sunny', 0.03, 0.2, 0, 0], … } | I cieli: il nome che si legge, quanta parte del cielo è nuvola, quanto sono spesse le nuvole, la pioggia e la nebbia, da 0 a 1. Il cielo calcolato e le icone vengono da questi numeri. |
TIME_LAPSE | script.js | 3 | Quanti km fanno le nuvole col vento, a 15 km/h, per ogni ora scorsa: più alto, più corrono quando si scorrono le ore. |
DRIFT | script.js | 4 | Quanto in fretta le nuvole vanno alla deriva mentre si guarda, in volte il vento vero. |
DETAIL | script.js | 3 | Quanti pixel copre ogni punto del cielo calcolato: più piccolo è più fine e più lento. |
STARS | script.js | 260 | Quante stelle escono di notte. |
RAIN | script.js | 150 | Quante gocce cadono con la pioggia più forte. |
CHANGE | script.js | 1.2 | I secondi che il cielo impiega a correre fino a un'ora scelta con un clic o un tasto. |
Per l'app o il sito di una località di mare, di un porto, di un campeggio o di una scuola di vela, un'app per chi fotografa e aspetta la luce giusta, la pagina di un evento all'aperto, e in generale per una previsione in cui conta com'è il cielo, non solo i numeri.
Il widget è largo 380 pixel e sul telefono si stringe alla larghezza dello schermo (358 su uno schermo da 390), sempre alto 424: il cielo si ricalcola per la misura nuova. Le ore si trascinano col dito, con l'inerzia, e in verticale la pagina scorre come sempre (touch-action pan-y). La tela si disegna a densità 2 al massimo, e se un telefono lento impiega più di 14 millesimi per un fotogramma il cielo si calcola su una griglia un po' più grossa invece di andare a scatti.
Le ore non corrono: un'ora scelta con un clic, coi tasti o dall'anteprima arriva subito e il cielo vecchio si dissolve nel nuovo in 0,4 secondi. Il dito trascina ancora la striscia (è la mano a muoverla), ma senza inerzia; le nuvole non vanno alla deriva, il mare non luccica, le gocce vicine non cadono e non c'è entrata.
GSAP 3.15.0, Onest (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 25 KB; le librerie: GSAP + Inertia + Draggable 44 KB.
Provata il 6 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.