
Il pulsante che si ricostruisce
Pulsanti, Testo, Fisica, SVG
NuovaGratis
Un comando di installazione col suo pulsante Copy: al clic i caratteri si sollevano uno dopo l'altro e volano in una scia dentro l'icona degli appunti, che si riempie come un bicchiere con l'onda che sciaborda; piena, diventa una spunta che si disegna e la scritta mescola le lettere in Copied. Poi i caratteri ricadono al loro posto. Copia davvero.
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 copy button</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/geist@5.3.0/index.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/geist-mono@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the snippet: pressed, Copy puts the command on the clipboard while its characters lift one after another, fly
in a stream into the clipboard icon and fill it like a glass; the icon turns into a tick that draws itself,
the label scrambles into Copied, and the characters drop back into their places -->
<figure class="snippet" data-snippet data-autoclic>
<div class="snippet__row">
<pre class="snippet__code"><code data-code><span class="tok tok--prompt" aria-hidden="true">$</span> <span data-cmd-text>npm install gsap</span></code></pre>
<button class="copy" type="button" aria-label="Copy the command" data-copy>
<svg class="copy__icon" viewBox="0 0 24 24" aria-hidden="true">
<defs>
<clipPath id="copy-board"><rect x="5.6" y="5.6" width="12.8" height="15.3" rx="2.2"/></clipPath>
</defs>
<g data-board>
<g clip-path="url(#copy-board)"><path class="copy__liquid" d="" data-liquid/></g>
<rect class="copy__line" x="5.6" y="5.6" width="12.8" height="15.3" rx="2.2"/>
<rect class="copy__clip" x="8.6" y="3.4" width="6.8" height="3.6" rx="1.2"/>
</g>
<path class="copy__tick" pathLength="1" d="M6.5 12.6l3.6 3.6 7.4-7.6" data-tick/>
</svg>
<span class="copy__label" data-label>Copy</span>
</button>
</div>
<p class="sr" aria-live="polite" data-live></p>
</figure>
</main>
<!-- the characters in flight, over the whole page -->
<div class="flight" aria-hidden="true" data-flight></div>
<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.
19 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 che copia» da Animorio e adattala al mio sitoIl comando è scritto dallo script un carattere per span, con la classe della sua parte (il programma, il verbo, il pacchetto) per il colore. Al clic ogni carattere ha una copia in uno strato fisso sopra la pagina, messa esattamente dove sta l'originale, che si nasconde: è la copia che vola, così il testo vero non si muove mai e resta selezionabile.
Ogni copia si solleva di LIFT pixel, poi segue una curva di Bézier quadratica dalla sua casa alla bocca dell'icona, con il punto di controllo ARC pixel sopra (mai oltre il bordo alto del blocco, dove il fondo chiaro la farebbe sparire: per questo il comando ha 48 pixel di blocco scuro sopra e sotto, 44 sul telefono) e un po' diverso per ognuna. GSAP muove solo un numero da 0 a 1 per ogni carattere, STAGGER secondi dopo il precedente, con power1.in: un ciclo sul ticker ne calcola la posizione, la rotazione e la misura che cala.
Ogni carattere tiene gli ultimi punti per cui è passato (di più con TRAIL alto) e un canvas a tutto schermo li ridisegna a ogni fotogramma come una linea che si assottiglia e sbiadisce verso la coda, nel colore del carattere. Arrivato, la scia si svuota dalla coda.
Dentro l'icona, tagliato dalla sua forma con un clipPath, c'è un tracciato SVG ridisegnato a ogni fotogramma: il livello sale a ogni carattere che arriva, e la superficie è una retta inclinata più un'onda, entrambe su piccole molle smorzate. Ogni carattere che cade dà un colpo alla molla (SLOSH), e l'onda si calma da sola; vicino al fondo e all'orlo l'ampiezza si stringe per non uscire.
Pieno, l'icona si rimpicciolisce e una spunta si disegna con stroke-dashoffset; la scritta cambia mescolando: ogni lettera passa per qualche carattere a caso prima di fermarsi, da sinistra, e la sua scatola si allarga di un ch per lettera (il carattere è monospaziato). Dopo COPIED secondi i caratteri ricadono da 18 pixel più su con back.out. Gli appunti si scrivono con navigator.clipboard e, se il browser dice no, con una textarea nascosta ed execCommand; se non va nemmeno così il comando viene selezionato.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
STAGGER | script.js | 0.028 | I secondi fra un carattere che si solleva e il successivo. |
FLIGHT | script.js | 0.55 | I secondi che un carattere impiega a volare dentro gli appunti. |
ARC | script.js | 48 | Quanto in alto salgono i caratteri lungo la curva, in pixel (mai oltre il bordo alto del blocco). |
LIFT | script.js | 9 | Di quanti pixel si solleva un carattere dal suo posto prima di volare. |
TRAIL | script.js | 0.6 | Quanto resta la scia dietro un carattere in volo, da 0 a 1. |
SLOSH | script.js | 1 | Quanto sciaborda il liquido quando i caratteri ci cadono dentro. |
COPIED | script.js | 1.6 | I secondi in cui il pulsante dice Copied prima che i caratteri tornino. |
Per il pulsante Copy accanto a un comando breve, una chiave API, un codice sconto o un indirizzo da incollare: dove copiare è l'azione principale della pagina e vale la pena farla vedere. Per blocchi lunghi meglio far volare solo la prima riga: centinaia di caratteri in volo diventano una nuvola.
Il blocco si stringe alla larghezza dello schermo e il comando scende a 13,5 pixel; il comando scorre di lato dentro il suo riquadro se non ci sta, senza far sforare la pagina. Il tocco fa come il clic, e il volo è lo stesso, più corto perché il pulsante è più vicino.
I caratteri non volano: il comando resta fermo, l'icona lascia il posto alla spunta e la scritta diventa Copied subito, senza mescolare le lettere; poi tutto torna com'era in dissolvenza. Il pulsante non si stringe sotto la pressione.
GSAP 3.15.0, Geist (font variabile) 5.3.0, Geist Mono (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 8,2 KB; le librerie: GSAP 28 KB.
Provata il 4 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.