
Il pulsante che copia
Pulsanti, Testo, SVG, Fisica
NuovaGratis
Nello stile minimal: il Send invite di un’app per i team, una pillola sottile d’inchiostro su bianco con dentro una molla disegnata a filo. Tenendo premuto la molla si carica: le parole scivolano a destra, si stringono e si fanno più pesanti, la molla si chiude e diventa blu cobalto. Lasciando, la molla spara le parole fuori dalla pillola e Invite sent atterra mentre la molla oscilla e si ferma.
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 spring-loaded button</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/archivo@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the spring-loaded button: the Send invite of a team app, a thin ink pill on white with a hairline coil spring
inside, between the words and the right end. Press and hold to load it: the words slide right, narrow and
get heavier, and the coil closes up. Let go and the spring fires the words out of the left end; Invite sent
rides in on the rest of the swing and settles. A short click loads and fires it by itself -->
<div class="coil" data-coil>
<button class="coil__btn" type="button" data-btn data-autoclic>
<span class="coil__track" aria-hidden="true">
<span class="coil__word" data-word="a"></span>
<span class="coil__word" data-word="b"></span>
<svg class="coil__spring" data-spring>
<path class="coil__wire" data-wire></path>
<path class="coil__plate" data-plate></path>
<path class="coil__ticks" data-ticks></path>
<path class="coil__lit" data-lit></path>
</svg>
</span>
<span class="sr" data-label></span>
</button>
<p class="coil__note"><svg class="coil__check" viewBox="0 0 14 14" aria-hidden="true"><path d="M2.5 7.4 5.6 10.3 11.5 3.8" pathLength="1" data-check></path></svg><span data-note></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.
16 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 a molla da caricare» da Animorio e adattala al mio sitoTutto viene dalla distanza della piastra dal suo posto, x: positiva quando la molla è carica, negativa quando oscilla oltre. A ogni fotogramma si ridisegnano da lì la molla (un zigzag di TURNS giri fra la piastra e il fondo), la piastra, le tacche accese, il colore che va dall’inchiostro al cobalto, lo spessore del contorno, e la larghezza, il peso e il posto delle parole, incollate alla piastra.
Mentre il dito tiene, la piastra è tirata verso un bersaglio che cresce come 1 meno e alla meno il tempo, fino a TRAVEL pixel in circa LOAD secondi, con una molla rigida e molto smorzata che la segue senza rimbalzi. A carica piena si aggiunge un tremito di quattro decimi di pixel.
Lasciando, la piastra diventa una molla smorzata intorno a zero (STIFF, DAMP), col passo di tempo limitato a 1/30 di secondo: va oltre il suo posto e torna. Se era carica almeno al 30 per cento, al primo passaggio per lo zero le parole si staccano con la velocità della piastra, accelerano e si spengono uscendo a sinistra, e quelle nuove cadono sulla piastra con un tween di GSAP.
La larghezza va da 100 a 100 meno SQUEEZE con la carica e sale fino a 122 quando la molla oscilla oltre lo zero; il peso va da 420 a 660. Le parole sono incollate alla piastra dal loro bordo destro, quindi stringendosi si allontanano dal bordo sinistro come schiacciate.
pointerdown carica e cattura il puntatore, pointerup spara; una pressione più corta di 200 millesimi continua a caricare da sola e poi spara. Un clic senza puntatore (tastiera, anteprima: detail uguale a zero) carica e spara da solo. Quando niente si muove il ciclo si toglie dal ticker di GSAP.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
LABEL | script.js | Send invite | Le parole a riposo. |
DONE | script.js | Invite sent | Le parole quando l’invito è partito. |
NOTE | script.js | To ana@northfield.studio | La riga piccola sotto la pillola. |
NOTE_DONE | script.js | Ana will get it in a moment | La riga piccola quando l’invito è partito. |
LOAD | script.js | 0.9 | I secondi da tenere premuto per caricare tutta la molla. |
TRAVEL | script.js | 42 | Di quanti pixel si chiude la molla carica. |
STIFF | script.js | 260 | La rigidità della molla: più alta, spara più veloce. |
DAMP | script.js | 9 | Quanto in fretta si spegne l’oscillazione dopo lo sparo. |
TURNS | script.js | 9 | I giri della molla. |
SQUEEZE | script.js | 30 | Quanto si stringono le parole con la molla carica. |
Per un’azione che parte e non torna indietro e che vale la pena sentire: mandare un invito o un messaggio, pubblicare, lanciare un’iscrizione. Tenere premuto evita gli invii per sbaglio, e il clic breve resta per chi ha fretta.
La pillola si stringe fino a 32 pixel dai bordi e la molla si ricalcola sulla larghezza vera. Il dito che tiene carica come il mouse, con la pillola che non fa scorrere la pagina mentre la si tiene; il tocco breve carica e spara da solo. La molla che si chiude al passaggio c’è solo col mouse.
Niente molla che si muove né parole che volano: al clic le parole si scambiano in dissolvenza, la riga sotto cambia e la spunta compare.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 6,1 KB; le librerie: GSAP 28 KB.
Provata il 23 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.