
Il rullo delle ore
Selettori, 3D, Fisica
NuovaGratis
Il download di un kit di design come un filo di lana che arriva da sinistra, teso e oscillante, e si avvolge in un gomitolo che gira e cresce con i byte. Ogni passata è un cerchio massimo su una sfera, inclinato in modo nuovo, disegnato in 3D su canvas con la parte dietro nascosta. Se la connessione cade il filo si spezza e pende dal gomitolo fino a Retry; alla fine il capo si infila sotto, il gomitolo fa un saltello e rotola un poco.
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, viewport-fit=cover">
<title>The yarn ball download</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/anybody@5.3.0/standard.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the download of a design kit shown as a strand of yarn: it comes in from the left, taut and swinging, and is
wound onto a spinning ball that grows with the bytes. Every pass of yarn is a great circle on a sphere, tilted a
little more each time, drawn in 3D on the canvas. The words, the figure and the button are HTML -->
<section class="kit" aria-labelledby="kit-title" data-kit>
<div class="kit__head">
<div class="kit__words">
<h2 class="kit__title" id="kit-title"><span class="kit__swap" data-title>Field Kit</span></h2>
<p class="kit__meta"><span class="kit__swap" data-meta>Fonts, icons & textures · v2.4</span></p>
</div>
<p class="kit__figure" aria-hidden="true">
<span class="kit__pct is-quiet" data-pct>312 MB</span>
<svg class="kit__tick" viewBox="0 0 24 24" data-tick><path d="M5.5 12.6l4.1 4.1L18.6 7.4" pathLength="1"/></svg>
</p>
</div>
<div class="kit__ball" role="progressbar" aria-labelledby="kit-title" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="0" aria-valuetext="Not downloading" data-bar>
<canvas class="kit__paint" aria-hidden="true" data-paint></canvas>
</div>
<div class="kit__foot">
<p class="kit__note"><span class="kit__swap" data-note>1,208 files</span></p>
<button class="pill" type="button" data-action data-autoclic><span class="pill__label" data-label>Download</span></button>
</div>
<p class="sr" role="status" aria-live="polite" data-live></p>
</section>
</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.
28 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 gomitolo del download» da Animorio e adattala al mio sitoIl gomitolo è una curva sola calcolata una volta: un punto p e la sua direzione t camminano su un cerchio massimo (p' = p cos ds + t sin ds, t' = t cos ds − p sin ds). Alla fine di ogni passata, un po' più lunga di un giro perché le passate non si incrocino tutte nello stesso punto, la direzione ruota intorno a p verso la prossima di una serie di inclinazioni sparse su tutta la sfera (una spirale aurea), al massimo di TILT gradi: così ogni passata è un cerchio massimo nuovo e il gomitolo si copre tutto invece di fare una fascia.
Il volume del gomitolo cresce col filo avvolto, e il filo con i byte: il raggio di ogni passata è la radice cubica di r0³ + (R³ − r0³) · s / N. Ogni passata sta su una sfera un po' più grande della precedente, quindi le vecchie restano sotto le nuove anche nel disegno.
A ogni fotogramma si cerca il punto in cui il filo che arriva dal bordo tocca il gomitolo (la tangente da un punto a un cerchio) e si costruisce la rotazione M = S·Eᵀ che porta la fine della curva esattamente lì, con la direzione rivolta indietro lungo il filo e un poco verso chi guarda. Più filo arriva, più la fine della curva avanza e più il gomitolo gira: nessuna velocità di rotazione inventata.
La curva proiettata si disegna a tratti: prima la metà nascosta delle ultime passate, scura, dalla più nuova alla più vecchia; poi il nucleo, un disco a sfumatura radiale grande quanto le passate di qualche giro fa; poi la metà davanti dalla più vecchia alla più nuova, così ogni passata copre quelle di prima. Ogni tratto ha un contorno scuro sotto tutto il pezzo (niente giunture), il corpo illuminato dalla normale della sfera e più scuro quanto più è sepolto, i trefoli con un tratteggio che resta fermo sul filo e un riflesso sulle passate nuove. Si ridisegna solo mentre qualcosa si muove.
Il filo che arriva è una retta con un po' di flessione più tre modi di vibrazione smorzati (seni di una, due e tre mezze onde): la tensione cambia la loro frequenza, i pezzi grossi di byte e lo strattone iniziale li colpiscono, il giro del gomitolo li fa fremere. Quando la connessione cade il filo diventa due corde a integrazione di Verlet con vincoli di lunghezza, gravità, il pannello come pavimento e il gomitolo come ostacolo: una viene tirata fuori dal bordo, l'altra pende dal gomitolo e ci si appoggia sopra. Retry fa rientrare il filo e riporta la corda sulla retta tesa.
Il gomitolo è un role=progressbar con aria-valuenow e aria-valuetext in megabyte, il pannello ha aria-busy mentre scarica e una riga aria-live dice quando il download parte, si ferma, si interrompe e finisce. Il pulsante cambia parola (Download, Pause, Resume, Retry, Download again) e la pillola prende la larghezza nuova con un rimbalzo; un clic da script, quello dell'anteprima, non mette mai in pausa.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
SECONDS | script.js | 6 | Quanto dura il download della demo, in secondi (uno vero segue i suoi byte). |
SIZE | script.js | 312 | I megabyte del pacchetto. |
PACKAGE | script.js | 'Field Kit' | Il nome del pacchetto. |
FAIL_EVERY | script.js | 2 | Nella demo, un download su quanti si interrompe (0 mai). |
FAIL_AT | script.js | 0.57 | Fin dove arriva il download che si interrompe, da 0 a 1. |
BALL | script.js | 46 | Il raggio del gomitolo finito, in pixel. |
THREAD | script.js | 3.4 | Lo spessore del filo, in pixel. |
PASSES | script.js | 96 | Quante passate di filo fanno il gomitolo intero. |
TILT | script.js | 70 | Di quanti gradi al massimo si inclina ogni passata rispetto alla precedente. |
SWING | script.js | 1 | Quanto oscilla il filo teso che arriva: 0 niente, 1.5 molto. |
FOLLOW | script.js | 0.4 | Quanto ci mette il gomitolo a raggiungere i byte, in secondi. |
Per un download o un'esportazione di qualche secondo con un nome e un peso: un kit di font, un pacchetto di icone, un archivio di progetto. Il gomitolo che cresce dice «si accumula» meglio di una barra, e il filo spezzato dice subito che la connessione è caduta; per un caricamento di mezzo secondo è troppo.
Il pannello prende la larghezza dello schermo meno 32 pixel (358 a 390) e resta alto uguale; il gomitolo resta al 60% della larghezza e il filo si accorcia. Il canvas disegna alla densità vera dello schermo, fino a due volte. Il pulsante col dito si schiaccia e rimbalza; la scritta si allarga sull'asse della larghezza solo sotto il mouse.
Niente strattoni, oscillazioni, frustate, saltelli né rotolamenti: il filo è teso o lento senza vibrare, il gomitolo cresce seguendo subito i byte (è lui che dice a che punto si è), il filo spezzato pende già fermo, alla fine il capo è già dentro e la spunta e le parole nuove arrivano in dissolvenza.
GSAP 3.15.0, Anybody (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 16 KB; le librerie: GSAP 28 KB.
Provata il 8 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.