
L’indicatore a lancetta
Contatori, Fisica, SVG
NuovaGratis
Un download che apre il suo stesso pulsante: le parole fanno spazio, lungo il mezzo compaiono i denti di una cerniera e il cursore corre da sinistra a destra con l'avanzamento; dietro di lui i due lati della stoffa si separano sulla fodera arancio, con la percentuale che viaggia nell'apertura, e la linguetta dondola a ogni partenza e fermata. Alla fine i lati cadono aperti sul file salvato, e un clic o un momento richiudono tutto.
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 zipper button</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/parkinsans@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the zipper button: a download that unzips the button as the file comes in; the pull runs along with the
progress and swings as it starts and stops, and at the end the two sides fall open on the saved file -->
<div class="zip" data-zip data-autoclic>
<button class="zip__btn" type="button" aria-label="Download .zip, 2.4 MB" data-btn>
<svg class="zip__art" aria-hidden="true" data-art></svg>
<span class="zip__label" aria-hidden="true">
<span class="zip__name" data-part>Download .zip</span>
<span class="zip__size" data-part>2.4 MB</span>
</span>
<span class="zip__done" aria-hidden="true" data-done>
<svg class="zip__check" viewBox="0 0 24 24"><path d="M5 12.6l4.3 4.3L19 7.2" pathLength="1" data-check/></svg>
<span class="zip__saved">
<span class="zip__saved-name">Saved to Downloads</span>
<span class="zip__saved-file">animorio.zip</span>
</span>
</span>
</button>
<p class="zip__hint"><span data-hint>14 files, ready to unzip</span></p>
<p class="sr" aria-live="polite" data-live></p>
</div>
</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.
20 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 pulsante con la cerniera» da Animorio e adattala al mio sitoIl pulsante è un SVG ridisegnato a ogni fotogramma da pochi numeri che GSAP fa scorrere (dove sta il cursore, quanto può aprirsi la cerniera, quanto si vedono i denti, quanto sono caduti i lati). Ogni lato è un tracciato: il bordo esterno della pillola, preso fitto attorno alle estremità tonde e ogni 6 pixel in mezzo, poi il bordo della cerniera; la stoffa è un pattern a righe diagonali, e le cuciture corrono a 6 pixel dal bordo.
A ogni x, ogni lato si allontana dal mezzo di GAP/2 per smoothstep((cursore − x) / SPREAD): subito dietro al cursore i denti cominciano a staccarsi, SPREAD pixel più indietro sono del tutto aperti, davanti al cursore restano chiusi. I denti, uno ogni 4,6 pixel, sono a turno del lato di sopra e di quello di sotto, e chiusi stanno uno fra l'altro.
L'avanzamento finto è una timeline di sei tratti che insieme durano SPEED secondi, ognuno con sine.inOut: il cursore riparte e si ferma come i pezzi di un file che arrivano. La percentuale sta SPREAD + 6 pixel dietro al cursore, dove l'apertura è piena, ed è tagliata dalla forma del pulsante.
La linguetta è un pendolo: a ogni fotogramma la sua accelerazione è una molla che la riporta giù, uno smorzamento e la spinta dell'accelerazione del cursore (misurata dalla differenza fra due velocità) per SWING. Così dondola quando il cursore parte e quando si ferma, e quando il mouse arriva sul pulsante.
Alla fine i due lati si allontanano di 0,85 volte l'altezza con power3.in e svaniscono sulla fodera, dove la spunta si disegna con stroke-dashoffset. Richiudendo, lo stesso cuneo segue il cursore che torna indietro. Un clic da script (l'anteprima della libreria) scarica e, a file salvato, richiude; non annulla mai a metà.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
SPEED | script.js | 2.6 | I secondi del download finto. |
GAP | script.js | 24 | Di quanto si separano i due lati della cerniera, in pixel. |
SPREAD | script.js | 70 | In quanti pixel dietro al cursore la cerniera si apre del tutto. |
SWING | script.js | 1 | Quanto dondola la linguetta quando il cursore parte e si ferma. |
DONE | script.js | 2.2 | I secondi in cui il pulsante dice Saved prima di richiudersi da solo. |
Per il pulsante che scarica un archivio, un listino, un kit per la stampa o i file di un progetto: dove l'attesa del download può diventare un piccolo spettacolo, e dove una cerniera c'entra davvero (abbigliamento, borse, viaggi).
Il pulsante è largo 320 pixel, o lo schermo meno 48, e la cerniera si ridisegna sulla misura vera a ogni cambio di dimensione; al tocco si stringe appena come col mouse, e la linguetta dondola per il mouse che arriva, non per il dito.
Il download si vede lo stesso, col cursore che va avanti diritto senza strappi e la percentuale; le parole spariscono senza scivolare, la linguetta non dondola, alla fine il file salvato c'è subito senza la caduta dei lati, e la richiusura è immediata.
GSAP 3.15.0, Parkinsans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 7,1 KB; le librerie: GSAP 28 KB.
Provata il 12 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.