
Il pulsante d'acqua
Pulsanti, SVG, Fisica, Hover
NuovaGratis
Tre interruttori delle impostazioni di un programma di grafica, e ognuno è una piccola livella a bolla in alluminio anodizzato che bascula su un perno. Acceso, la livella si inclina con la destra in alto e la bolla, una massa vera in un liquido denso, resta indietro, risale allungandosi in una losanga e si ferma tonda fra i segni di destra, mentre il liquido si scalda e il nome si accende. Col mouse sopra la livella pende un poco dalla parte del puntatore, e si può afferrare e inclinare a mano.
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 spirit level switch</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/geist@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- three switches from the settings of a design tool, each one a small torpedo level in anodised aluminium that
rocks on a pin, with a glass vial of yellow-green spirit and an air bubble in it. Switched on, the level tips
with its right end up and the bubble runs up to the marks at that end; off, it tips the other way. The
pointer's weight leans it a little, and it can be grabbed and tipped by hand -->
<div class="lv" data-levels>
<div class="lv__row lv__row--cobalt" data-row>
<label class="lv__name" for="lv-snap">Snap to grid</label>
<button class="lv__switch" id="lv-snap" type="button" role="switch" aria-checked="false" aria-describedby="lv-snap-hint" data-switch data-autoclic>
<svg class="lv__art" viewBox="6 4.5 228 57" aria-hidden="true" focusable="false" data-art></svg>
</button>
<span class="sr" id="lv-snap-hint">Objects lock to the 8 px grid</span>
</div>
<div class="lv__row lv__row--graphite" data-row>
<label class="lv__name" for="lv-rulers">Show rulers</label>
<button class="lv__switch" id="lv-rulers" type="button" role="switch" aria-checked="true" aria-describedby="lv-rulers-hint" data-switch>
<svg class="lv__art" viewBox="6 4.5 228 57" aria-hidden="true" focusable="false" data-art></svg>
</button>
<span class="sr" id="lv-rulers-hint">Rulers along the top and left</span>
</div>
<div class="lv__row lv__row--ember" data-row>
<label class="lv__name" for="lv-guides">Smart guides</label>
<button class="lv__switch" id="lv-guides" type="button" role="switch" aria-checked="false" aria-describedby="lv-guides-hint" data-switch>
<svg class="lv__art" viewBox="6 4.5 228 57" aria-hidden="true" focusable="false" data-art></svg>
</button>
<span class="sr" id="lv-guides-hint">Lines appear as edges align</span>
</div>
<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.
49 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 della livella» da Animorio e adattala al mio sitoOgni livella è un button con role switch e aria-checked, con la sua label for (il nome) e aria-describedby su una frase nascosta che dice a cosa serve: Invio e Spazio accendono e spengono, la freccia a destra accende e quella a sinistra spegne, il clic sul nome anche. Una riga aria-live annuncia il nuovo stato. Le tre righe stanno in una griglia a due colonne condivise (subgrid), così i nomi e le livelle restano allineati.
Lo script disegna una volta l’SVG di ogni livella: la barra con un gradiente nei colori del suo anodizzato, una grana spazzolata di righine a caso (sempre le stesse per ogni livella), il lucido, gli spigoli chiari, i tappi di gomma con le righe, la O e la I incise, la finestra con lo spigolo che prende luce in basso e l’ombra del labbro in alto. La fiala è una capsula piegata lungo un arco: sopra e sotto due Bézier quadratiche, alle estremità due mezzi cerchi. Il viewBox è tagliato sulla livella inclinata del tutto, così l’interruttore è alto 56 pixel e la livella, accesa o spenta, li riempie senza uscire; la rotazione è una trasformazione CSS intorno al perno (transform-origin al 77,19 per cento).
La fiala è arcuata, quindi il suo punto più alto si sposta lungo la fiala quando la livella si inclina: alla piena inclinazione TILT sta fra i segni. La bolla è tirata verso quel punto con una forza che cresce con la distanza e frenata dal liquido: accelerazione ω²(cima − s) − 2ζω·v, con ω da SPEED e ζ da DRAG, diversi per ogni bolla. Si calcola in quattro passi a fotogramma su gsap.ticker, col passo di tempo limitato a 1/30 di secondo; le estremità della fiala la fermano con un piccolo colpo. L’inclinazione stessa è un tween di GSAP, quindi la bolla resta indietro e poi accelera.
La lunghezza della bolla segue la sua velocità attraverso una piccola molla rigida, così quando si ferma ha un guizzo; l’altezza è l’area divisa per la lunghezza, e non supera il vetro. Il contorno è una superellisse di 48 punti, piatta in alto dove la bolla preme sul vetro, con la testa più squadrata e la coda che si assottiglia da sotto in proporzione alla velocità. Il menisco sono tre bande evenodd fra contorni sempre più interni, scure fuori e più chiare dentro, più spesse alle estremità; sopra, un riflesso lungo il bordo alto, un orlo chiaro in basso e un puntino di luce.
I quattro segni si ridisegnano a ogni fotogramma come linee di 19 punti. Per ogni punto si guarda la distanza dalla bolla in unità della bolla: dentro la bolla il segno si vede più piccolo (0,76 volte, verso il suo centro), fuori viene spinto verso l’esterno di LENS·e^(−2,4·(d−1)), così si piega intorno a lei; dove attraversa il bordo la linea si interrompe, invece di tagliare il menisco con un tratto storto.
Col mouse sopra, una molla morbida porta la livella a pendere di LEAN gradi dalla parte del puntatore. Trascinata oltre 4 pixel prende il puntatore: alzare il punto preso la ruota intorno al perno e tirarla di lato la inclina dalla stessa parte, fino a GRAB volte TILT; lasciata, va nello stato più vicino, e il clic che segue il trascinamento non conta. Il colore del liquido segue l’inclinazione (gli stop del gradiente si rimescolano solo quando cambia), la luce del nome segue la bolla (--lit sulla riga). Ogni fotogramma si confronta una chiave di valori arrotondati: quando non cambia niente, niente si ridisegna.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
TILT | script.js | 4 | Quanto si inclina la livella per acceso (destra in alto) e spento (sinistra in alto), in gradi. |
TIP | script.js | 0.55 | I secondi che la livella impiega a inclinarsi dall’altra parte. |
LEAN | script.js | 0.75 | Quanto il peso del puntatore fa pendere la livella sotto il mouse, in gradi (0, niente). |
SIZE | script.js | [1, 0.86, 1.12] | Quanto è grande la bolla di ogni livella, dall’alto in basso. |
SPEED | script.js | [8.2, 6, 10.5] | Quanto in fretta ogni bolla risponde alla pendenza. |
DRAG | script.js | [0.74, 0.9, 0.68] | Quanto il liquido trattiene ogni bolla: sotto 1 va un poco oltre il segno e torna. |
STRETCH | script.js | 0.6 | Quanto si allunga la bolla quando corre (l’area resta la stessa, quindi si assottiglia). |
LENS | script.js | 2.6 | Quanto il liquido intorno alla bolla piega i segni dietro di lei (0, niente lente). |
GRAB | script.js | 1.8 | Fin dove si può inclinare la livella a mano, in multipli di TILT. |
Per gli interruttori di un programma che ha a che fare con allineare e misurare: le impostazioni di un editor di grafica o di un CAD (griglia, righelli, guide), un’app di arredamento o di cantiere, uno strumento per fotografi o per chi appende quadri. La bolla che corre fra i segni dice da sola acceso e spento anche senza colore. Sta bene in un piccolo gruppo come qui; in un elenco lungo di impostazioni conviene usarlo per poche voci, accanto a interruttori normali.
Stessa misura che sul computer: ogni livella è 224 per 56 pixel e a 390 pixel il nome e la livella stanno ancora su una riga (il gruppo è largo 338); su schermi più stretti la livella si rimpicciolisce con lo schermo. Il tocco accende e spegne; il dito trascinato di lato inclina la livella e la bolla corre, mentre in su e in giù la pagina scorre ancora (touch-action: pan-y). Niente pendenza sotto il mouse, che col dito non c’è.
Niente movimento: la livella è subito alla sua nuova inclinazione e la bolla non corre, svanisce a un’estremità e ricompare fra i segni dell’altra in meno di mezzo secondo; il colore del liquido e la luce del nome cambiano in dissolvenza. Niente pendenza sotto il mouse e niente trascinamento; il clic, il tocco e la tastiera funzionano come sempre.
GSAP 3.15.0, Geist (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 13 KB; le librerie: GSAP 28 KB.
Provata il 7 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.