
Il pulsante che copia
Pulsanti, Testo, SVG, Fisica
NuovaGratis
L’interruttore Do not disturb di un’app per concentrarsi, nello stile minimal: la corsa è un filo sottilissimo teso fra due tacche, e il pomello è una perlina infilata sopra. Il peso della perlina piega il filo; acceso, la perlina scorre fino in fondo, va oltre di un pixel e torna, e il filo vibra e si assesta. Accanto la parola Off si assottiglia e svanisce, On arriva sottile e prende peso.
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 taut wire switch</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 Do not disturb switch of a focus app: the track is a hairline of wire stretched between two posts, and the
knob is a bead threaded on it. The bead's weight bends the wire; sliding along, it drags the bend with it, and
when it lands the wire rings and settles. The word next to it takes weight as the bead travels -->
<div class="dnd" data-dnd>
<label class="dnd__name" id="dnd-name" for="dnd-switch" data-name>Do not disturb</label>
<div class="dnd__row">
<button class="wire" id="dnd-switch" type="button" role="switch" aria-checked="false" aria-labelledby="dnd-name" data-switch data-autoclic>
<svg class="wire__art" aria-hidden="true" focusable="false" data-art>
<line class="wire__post" data-post></line>
<line class="wire__post" data-post></line>
<path class="wire__line" data-line></path>
<g class="wire__bead" data-bead>
<circle class="wire__ball" data-ball></circle>
<circle class="wire__ball wire__ball--on" data-ball-on></circle>
</g>
</svg>
</button>
<label class="dnd__state" for="dnd-switch" aria-hidden="true" data-state>
<span class="dnd__word dnd__word--off" data-off>Off</span>
<span class="dnd__word dnd__word--on" data-on>On</span>
</label>
</div>
</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 «L’interruttore sul filo teso» da Animorio e adattala al mio sitoÈ un button con role switch e aria-checked, col nome preso dalla scritta (aria-labelledby): Spazio e Invio lo accendono e lo spengono, le frecce a destra e a sinistra lo mettono acceso o spento, e la scritta e la parola accanto sono label for, quindi si possono cliccare. Dentro c’è un solo SVG con le due tacche, il filo (un path) e la perlina, un gruppo con due cerchi: bianco sotto e arancione sopra, con l’opacità che segue la perlina lungo il filo.
Lo spostamento del filo è la somma dei suoi primi 48 modi, sin(n π x / L), ognuno un oscillatore smorzato spinto dal peso della perlina nel punto dove si trova. Fermi, i modi sommati danno esattamente la V di una corda con un carico in un punto, più profonda nel mezzo (4 SAG a(L − a) / L²): per questo la perlina, attraversando, scende lungo una curva. Le note del filo sono n volte TONE, appena crescenti come in un filo un po’ rigido, e le più alte si smorzano prima.
Ogni modo avanza con la soluzione esatta della sua equazione sul passo (1/240 di secondo), non con Eulero: le note alte, molto più veloci dello schermo, restano stabili a qualunque frequenza e seguono la perlina, quelle basse suonano. I seni dei 48 modi nel punto della perlina si calcolano con la ricorrenza sin((n+1)θ) = 2 cos θ sin(nθ) − sin((n−1)θ); quelli degli 84 punti del disegno sono in una tabella rifatta al resize. Nel path il punto della perlina è inserito esatto, così la piega è netta.
Lungo il filo la perlina è una massa su una molla (SPRING) smorzata appena sotto il critico (DAMPING 0,82): su cento pixel di corsa va oltre di circa un pixel. Quando attraversa il suo posto pizzica il filo: ogni modo riceve una spinta di velocità proporzionale a sin(nθ) / n^1,5 e alla velocità d’arrivo (RING), e la parola riceve un colpo di peso su una sua molla morbida. Premuta, il suo peso diventa PRESS volte; trascinata, il peso si calcola per tenerla all’altezza del dito, e lasciata torna 1: il filo scatta indietro da solo, perché i modi sono rimasti dov’erano.
Off e On sono due parole nello stesso posto, in Archivo variabile, e i loro assi seguono la perlina: Off passa dal peso 320 a 120 e dalla larghezza 100 a 70 mentre svanisce salendo, On dal 130 al 760 e dalla larghezza 70 a 100 mentre arriva dal basso; al peso di On si aggiunge il colpo dell’arrivo, che va oltre e si assesta. Si scrive solo ciò che cambia, e quando filo, perlina e parola sono fermi il ciclo si toglie dal ticker di GSAP.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
TONE | script.js | 4.2 | La nota più bassa del filo, in vibrazioni al secondo: più alta, un filo più teso. |
DECAY | script.js | 0.04 | Quanto presto il filo smette di vibrare (lo smorzamento della nota più bassa). |
SAG | script.js | 5.5 | Quanto il peso della perlina piega il filo nel mezzo, in pixel. |
SPRING | script.js | 160 | Quanto forte la molla tira la perlina verso la sua estremità. |
DAMPING | script.js | 0.82 | Come si ferma la perlina: sotto 1 va un poco oltre (0,82 è circa un pixel). |
RING | script.js | 5 | Quanto forte la perlina pizzica il filo quando arriva, in pixel. |
PRESS | script.js | 1.9 | Quanto diventa più pesante la perlina sotto il dito o il mouse. |
PULL | script.js | 13 | Di quanto si può tirare la perlina fuori dalla linea, in su o in giù, in pixel. |
PEEK | script.js | 5 | Di quanti pixel la perlina si sporge verso l’altra estremità sotto il mouse. |
WEIGHT | script.js | [320, 760] | Il peso della parola Off e della parola On (da 100 a 900). |
Per un interruttore che chiede calma: Non disturbare, la modalità concentrazione, la pausa delle notifiche, il silenzioso di un’app per meditare, leggere o scrivere. Il filo che si assesta dice da solo che tutto si è fermato. È un pezzo da mettere da solo, su un fondo vuoto, dove si nota; in un elenco lungo di impostazioni conviene usarlo per una voce sola.
Stessa misura che sul computer, 184 per 56 pixel, e a 390 pixel tutto sta comodo con tanto vuoto intorno; sotto i 300 pixel il filo si accorcia a 156. Il tocco accende e spegne; appena il dito si appoggia la perlina diventa più pesante e affonda, come col mouse. Il dito trascinato porta la perlina lungo il filo e in su e in giù: per questo sull’interruttore la pagina non scorre (touch-action: none), fuori sì. Niente sporgenza sotto il mouse, che col dito non c’è.
Niente molle e niente vibrazioni: il filo è disegnato fermo con la sua piega, la perlina svanisce da una parte e ricompare dall’altra già del suo colore, e Off e On si scambiano in dissolvenza in tre decimi di secondo, ognuna col suo peso. All’apertura tutto compare in dissolvenza già al suo posto. Premere non affonda e non si trascina; il clic, il tocco e la tastiera funzionano come sempre.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 8,6 KB; le librerie: GSAP 28 KB.
Provata il 16 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.