
Il menu a mazzetta di colori
Menu, Fisica, Transizioni, Hover
NuovaGratis
La card di un tè verde nel negozio di una piccola casa del tè: sopra una tazza di vetro con l’acqua calda pende una bustina piramidale di seta. Con Steep, o con un clic o un tocco sulla tazza, la bustina scende nell’acqua oscillando sul filo e il tè ne esce in pennacchi che scendono e si arricciano, perché è più pesante dell’acqua, mentre l’acqua si fa piano piano giallo-verde e dal bordo sale il vapore. Il fluido è vero, risolto su una griglia (i fluidi stabili di Stam). Tolta, la bustina sgocciola; il colore resta.
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 steeping tea</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/full.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/mona-sans@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the card of a green tea in the shop of a small tea house. Over a glass cup of hot water hangs a silk pyramid
of tea on its string: with Steep, or a click or a tap on the cup, it goes down into the water swinging on the string, and the
tea leaves it in plumes that curl and sink, while the water slowly turns gold-green. Lifted, it drips; the
colour stays. The cup, the water and the tea are drawn by the script -->
<article class="tea" aria-labelledby="tea-name" data-tea data-autoclic>
<div class="tea__shot" data-shot>
<canvas class="tea__canvas" role="img" aria-label="A glass cup of hot water, with a silk pyramid of tea hanging over it on its string" data-canvas></canvas>
</div>
<div class="tea__body">
<p class="tea__kind">Green tea · Shizuoka</p>
<div class="tea__head">
<h2 class="tea__name" id="tea-name">Sencha Asamushi</h2>
<p class="tea__price">€14</p>
</div>
<div class="tea__meta">
<p class="tea__notes">Grassy · Marine · Sweet</p>
<p class="tea__weight">50 g</p>
</div>
<div class="brew">
<p class="brew__guide"><span class="brew__label">Brew</span> 70 °C · 90 s</p>
<button class="pill pill--steep" type="button" data-steep>
<span class="pill__icon" aria-hidden="true">
<svg class="steep-icon" viewBox="0 0 24 24">
<path class="steep-icon__water" d="M3.5 17.2c1.6-1 3.1-1 4.7 0s3.1 1 4.7 0 3.1-1 4.7 0 2.4.8 2.9.4"/>
<g class="steep-icon__bag" data-bag-icon>
<path d="M12 2.4v5"/>
<path d="M8.2 7.6h7.6L12 14.4z"/>
</g>
</svg>
</span>
<span class="pill__label" data-label>Steep</span>
</button>
</div>
<div class="buy">
<button class="pill pill--add" type="button" data-add>
<span class="pill__clip" aria-hidden="true">
<span class="add__fill" data-fill>
<svg class="add__wave" viewBox="0 0 96 8" preserveAspectRatio="none" data-wave><path d="M0 4c6-4 12-4 18 0s12 4 18 0 12-4 18 0 12 4 18 0 12-4 18 0 6 2 6 2V8H0z"/></svg>
</span>
</span>
<span class="pill__icon" aria-hidden="true">
<svg class="add__glyph" viewBox="0 0 24 24" data-cart><path d="M3.4 4.6h2.3l2.1 9.6a1.7 1.7 0 0 0 1.7 1.3h7.1a1.7 1.7 0 0 0 1.7-1.3l1.4-6.4H6.6"/><path d="M10.2 19.4a.9.9 0 1 0 0 .01M16.6 19.4a.9.9 0 1 0 0 .01"/></svg>
<svg class="add__glyph add__tick" viewBox="0 0 24 24" data-tick><path d="M5.6 12.6l4.1 4.1 8.7-9.2"/></svg>
</span>
<span class="pill__label" data-label>Add to cart</span>
</button>
<button class="pill pill--undo" type="button" data-undo hidden><span class="pill__label">Undo</span></button>
</div>
<p class="sr" aria-live="polite" data-live></p>
</div>
</article>
</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.
38 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 tè in infusione» da Animorio e adattala al mio sitoTutto è disegnato su una tavola di 324 per 300 punti, scalata al canvas. Il muro, il tavolo e le ombre stanno in uno strato; la tazza in altri tre, rifatti solo quando cambia la misura: il dietro (il vetro visto attraverso, il bordo lontano), la superficie dell’acqua (il riflesso della finestra, il menisco scuro e chiaro) e il davanti (i bordi scuri, le strisce di luce della finestra, il bordo, il fondo spesso, il manico). L’acqua è una lente: ogni colonna di pixel dietro di lei è presa da un’altra colonna dello sfondo, più larga in mezzo e stretta ai lati, e spostata in su e in giù, così il bordo del tavolo si piega.
La velocità sta su una griglia di celle di CELL pixel, ritagliata sulla forma dell’acqua: il vetro è una parete che la pressione non attraversa. A ogni passo il tè spinge giù l’acqua in proporzione a quanto è carico (SINK), i vortici sono tenuti vivi da una spinta intorno a ogni mulinello (vorticity confinement, CURL) solo dove c’è tè, la bustina trascina l’acqua con sé e un poco di viscosità avvicina ogni cella alla media delle vicine; poi la velocità si porta da sola indietro lungo il flusso (semi-lagrangiano) e una pressione, trovata con Gauss-Seidel sovrarilassato che riparte da quella di prima, toglie la divergenza così l’acqua non si comprime (i fluidi stabili di Stam).
Il tè sta su una griglia due volte più fine e va col flusso avanti e indietro (MacCormack, con un limite fra i quattro vicini), così i fili restano sottili. La bustina lo dà dalle facce in basso, con un disturbo che cambia sette volte al secondo e lo fa uscire in più fili: tanto all’ingresso e quando si muove, poi sempre meno. Piano piano il tè si scioglie in un colore uniforme di tutta la tazza, un po’ più carico in basso. Si disegna come luce tolta (Beer-Lambert): il colore del tè a piena forza in :root dice quanto toglie di ogni canale, una tabella di 1024 voci trasforma lo spessore di tè nel colore che passa, e l’immagine moltiplica l’acqua.
La cima della bustina è un punto di Verlet appeso a un filo che tira ma non spinge: quando l’acqua la sostiene il filo si allenta e si piega. Il peso e il freno passano da quelli dell’aria a quelli dell’acqua secondo quanto è immersa, a passi di 1/240 di secondo; l’angolo della bustina segue il filo su una molla smorzata. La mano è una timeline di GSAP, che parte solo con Steep o un clic sulla tazza: abbassa la bustina spostandosi un poco di lato, la immerge due volte e la lascia. Nell’acqua la bustina si vede più larga, come attraverso il vetro curvo, e trascina il fluido.
Uscita dall’acqua, sulla punta della bustina si gonfia una goccia che cade, tanto più spesso quanto più la bustina è piena. Ogni goccia che arriva fa un cerchio sulla superficie (un’ellisse chiara e una scura che si allargano) e una piccola nuvola di tè spinta in giù, che diventa un pennacchio. Il vapore sono tre fili di punti che salgono ondeggiando su due seni, disegnati a tratti che si allargano e svaniscono; si dirada in un minuto, come l’acqua che si raffredda.
Il tè si infonde solo a richiesta: Steep (anche con Invio o Spazio), un clic o un tocco sulla foto; Lift o un altro clic lo tolgono. Il puntatore sopra la foto fa solo un’anticipazione: un tween di GSAP abbassa la mano di 9 pixel con un rimbalzo e dà alla bustina una piccola spinta, così scende nella bocca della tazza e dondola, sempre sopra l’acqua; uscendo dalla foto torna su, e sul resto della card non succede niente. Add to cart si riempie come una tazza (una pellicola con l’onda in cima che sale), poi Added con la spunta, Undo, e il ritorno a riposo; uno stato aria-live dice ogni passo. Il passo di tempo è limitato a 1/30 di secondo; il pendolo dorme sotto mezzo pixel al secondo, il fluido quando la bustina non dà più niente e il tè si è mescolato, il vapore dopo un minuto: allora non si ridisegna più niente.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
STEEP | script.js | 1.3 | I secondi che la mano impiega per abbassare la bustina nell’acqua. |
LIFT | script.js | 1.1 | I secondi che impiega per tirarla fuori. |
SWING | script.js | 0.4 | Quanto liberamente la bustina dondola sul filo nell’aria: la parte della velocità che tiene ogni secondo (da 0,05 a 0,9). |
SINK | script.js | 64 | Quanto forte il tè scende nell’acqua: quanto è più pesante dell’acqua, in pixel al secondo quadrato. |
CURL | script.js | 4 | Quanto il tè che scende si arriccia in vortici (0 = fili lisci). |
STRENGTH | script.js | 1 | Quanto tè danno le foglie: di più, una tazza più scura. |
STEAM | script.js | 0.8 | Quanto vapore sale dalla tazza, da 0 a 1. |
CELL | script.js | 2.6 | La misura di una cella della simulazione dell’acqua, in pixel: più piccola è più fine e più lenta. |
WORDS | script.js | ['Lift', 'Adding', 'Added'] | Il pulsante Steep con la bustina nell’acqua, poi Add to cart mentre lavora e quando ha finito. |
Per la scheda di un tè, di una tisana o di un caffè in un negozio online; ovunque un prodotto si capisca meglio vedendolo all’opera (un colorante, un inchiostro, un sale da bagno, uno sciroppo) e per una pagina di prodotto che vuole un momento da guardare prima del carrello.
La card è larga 340 pixel, o lo schermo meno 32, e la scena si ridisegna alla misura vera. Un tocco sulla foto mette la bustina in infusione e un altro la toglie, come Steep e Lift; l’anticipazione del passaggio col mouse al telefono non c’è, perché il tocco fa già tutto; i pulsanti sono alti 50 e 42 pixel. Sotto i 360 pixel il nome e le pillole si stringono un poco. La simulazione è la stessa del computer: la griglia è piccola (circa 45 per 55 celle, e il doppio per il tè) e costa un paio di millisecondi a fotogramma.
Col puntatore sopra la foto la bustina resta ferma. Infusa, non scende e non dondola: compare nell’acqua con una dissolvenza e se ne va allo stesso modo. Niente pennacchi, gocce, cerchi né vapore: l’acqua prende il suo colore con una dissolvenza lenta e lo tiene. Le scritte dei pulsanti cambiano in dissolvenza e le pillole non si gonfiano.
GSAP 3.15.0, Fraunces (font variabile) 5.3.0, Mona Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 22 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.