
Il pulsante a strati
Pulsanti, Hover, Fisica
Gratis
Il pulsante Skip intro di un lettore video, fatto come una piccola vaschetta di ceramica piena d'acqua limpida su un fondo di sabbia, con la rete di luce del sole sul fondo. Premuto, un sasso piatto arriva da sinistra e fa rimbalzello: cinque o sei salti, ognuno più corto del precedente, ognuno coi suoi cerchi che si allargano e fanno ballare la luce sulla sabbia; poi affonda, resta sul fondo e la scritta diventa Intro skipped.
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 skipping stone button</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/figtree@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the skipping stone button: the Skip intro button of a video player, made as a little ceramic dish of clear,
sunlit water over pale sand. Pressed, a flat stone flies in from the left and skips across the water, every
hop shorter than the one before, then sinks to the bottom and stays there. The water is drawn on the first
canvas, the stone and the splashes on the second; the words stay on top -->
<div class="skip" data-skip>
<button class="skip__dish" type="button" data-dish data-autoclic>
<canvas class="skip__water" aria-hidden="true" data-water></canvas>
<canvas class="skip__air" aria-hidden="true" data-air></canvas>
<span class="skip__label" data-label>
<span class="skip__words" data-words>Skip intro</span>
<span class="skip__icons" aria-hidden="true" data-icons>
<svg class="skip__icon" viewBox="0 0 24 24" data-skip-icon>
<path class="skip__tri" d="M6.4 6.6v10.8c0 .9 1 1.4 1.7.9l7.7-5.4c.6-.4.6-1.4 0-1.8L8.1 5.7c-.7-.5-1.7 0-1.7.9z"/>
<path d="M18.8 5.8v12.4"/>
</svg>
<svg class="skip__icon skip__icon--done" viewBox="0 0 24 24" data-check>
<path d="M5 12.6l4.4 4.3L19.2 7.2" data-tick/>
</svg>
</span>
</span>
</button>
<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.
26 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 rimbalzello» da Animorio e adattala al mio sitoIl sasso ha una posizione nello spazio della vaschetta (di lato, in profondità e in altezza sopra l'acqua), una velocità, una rotazione su sé stesso e un'inclinazione tenuta da una molla. Parte sopra la pagina, a sinistra, con la spinta in alto calcolata perché tocchi l'acqua la prima volta poco dentro il bordo. A ogni tocco l'acqua porta via sempre la stessa quantità d'energia, LOSS volte quella del lancio (THROW), e lo ributta su in proporzione alla velocità che gli resta (LIFT): così ogni salto è più corto del precedente di circa la stessa misura, come nel modello semplice che i fisici usano per il rimbalzello. Quando gli resta troppo poca velocità ara l'acqua, si ferma e affonda.
L'acqua è una griglia di altezze, una cella per pixel, mossa dall'equazione delle onde: ogni cella è tirata verso le vicine, e quelle verso il fondo contano metà, perché a 45 gradi le distanze in profondità si vedono accorciate di sen 45; così i cerchi vengono ovali da soli. Contro la parete una cella usa sé stessa come vicina, e l'onda torna indietro. A ogni passo l'onda perde un po' della sua altezza (CALM) e un filo di viscosità spegne prima le increspature più fini; i passi al secondo crescono con la velocità delle onde (WAVE), perché il calcolo resti stabile. Un tocco è un'ammaccatura a campana, profonda quanto il colpo.
Ogni pixel dell'acqua si calcola come un raggio: dal pixel si trova il punto della superficie (sullo schermo 4 pixel più in basso del bordo, per questo in fondo si vede la parete asciutta), la pendenza in quel punto piega il raggio dell'occhio (BEND) e lo manda sulla sabbia un po' più in là, o sulla parete sott'acqua. Il colore della sabbia, illuminato, attraversa l'acqua: --water dice quanto ne passa per ogni colore, --glow quanta luce l'acqua aggiunge da sé. Sopra, un velo di cielo che cresce sui pendii girati dall'altra parte (Fresnel) e i luccichii dove la superficie rimanda il sole all'occhio. L'immagine si fa a due pixel per pixel css, con le pendenze interpolate.
La rete di luce sulla sabbia è vera: ogni cella della superficie manda il suo raggio di sole verso il fondo, spostato dalla sua pendenza, e lo deposita sulla sabbia fra le quattro celle più vicine; dove molti raggi cadono insieme la sabbia è chiara, dove ne cadono pochi è più scura. A riposo c'è sempre un'onda lunga leggerissima, cinque sinusoidi fisse, che basta a stendere una rete morbida; i cerchi del sasso la fanno ballare in anelli. Le pareti fanno ombra dove il raggio di sole, piegato nell'acqua, le incontrerebbe prima di arrivare al bordo: si calcola una volta sola.
La sabbia è disegnata una volta su una tela: le increspature, i ciottoli con la loro ombra, la grana. Il sasso che affonda si disegna sulla tela di sopra, colorato dall'acqua, alla profondità a cui si vede la sabbia; quando tocca il fondo diventa parte del disegno della sabbia, così la luce e le onde gli passano sopra come al resto. Ne restano STONES: i più vecchi svaniscono come coperti di sabbia.
Dopo ogni fotogramma si guarda l'onda più alta: quando per qualche fotogramma è sotto pochi millesimi di pixel e niente vola, le altezze tornano a zero, si disegna l'immagine a riposo e il ciclo non disegna più niente. Lungo il bordo dell'acqua ogni pixel mescola acqua e parete per quanto ne copre, e un filo chiaro fa il menisco. Su un dispositivo lento, se un fotogramma costa più di 9 millisecondi, l'acqua passa a un pixel per pixel css.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
THROW | script.js | 340 | Quanto forte si lancia il sasso, in pixel al secondo: più forte fa più salti. |
LIFT | script.js | 0.46 | Quanto l'acqua ributta su il sasso a ogni tocco: di più, salti più alti e più lunghi. |
LOSS | script.js | 0.13 | La parte dell'energia del lancio che ogni tocco porta via: meno, più salti. |
SPIN | script.js | 30 | Quanto in fretta il sasso gira su sé stesso, in radianti al secondo. |
RIPPLE | script.js | 1 | Quanto sono forti i cerchi dove il sasso tocca l'acqua. |
WAVE | script.js | 150 | Quanto in fretta si allargano i cerchi, in pixel al secondo. |
CALM | script.js | 1 | Quanto in fretta l'acqua torna ferma: di più, prima. |
CAUSTICS | script.js | 1 | Quanto è forte la rete di luce del sole sulla sabbia (0, niente rete). |
BEND | script.js | 1 | Quanto l'acqua piega la sabbia che si vede sotto. |
WAKE | script.js | 1 | Quanto il dito, cioè il puntatore, muove l'acqua passandoci sopra (0, niente). |
STONES | script.js | 5 | Quanti sassi restano sul fondo prima che il più vecchio si copra di sabbia. |
DONE | script.js | Intro skipped | La scritta quando il sasso è affondato. |
BACK | script.js | 1.6 | I secondi prima che la scritta torni quella di prima. |
Per il pulsante che salta qualcosa in un lettore o in un percorso: Skip intro, Skip recap, Skip ad in un lettore video o di podcast, Skip for now nelle schermate di benvenuto di un'app. Sta bene dove c'entrano l'estate, l'acqua, il viaggio, la natura: piattaforme di documentari, app di viaggi e di vacanze, siti di stabilimenti, piscine e campeggi. È un pulsante da far vedere, uno per pagina, non da mettere in una barra di comandi.
La vaschetta è alta 60 pixel come gli altri pulsanti e larga 320, o lo schermo meno 48; l'acqua si ricalcola alla misura vera. Il tocco lancia il sasso e fa un cerchio dove il dito tocca; il dito trascinato di traverso lascia la sua scia nell'acqua (touch-action: pan-y, così in su e in giù la pagina scorre ancora). Il sasso entra da sinistra sopra il margine della pagina, che non scorre di lato. Su un telefono lento l'acqua si disegna a un pixel per pixel css.
Niente volo e niente onde: al clic il sasso nuovo è già posato sul fondo e la vecchia immagine dell'acqua svanisce sopra di lui in una dissolvenza; la scritta e l'icona cambiano in dissolvenza, senza scivolare né sfocarsi. Il puntatore non muove l'acqua, al caricamento non cade la goccia, e la vaschetta premuta si scurisce appena invece di stringersi.
GSAP 3.15.0, Figtree (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 18 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.