
Il menu sotto il foglio
Menu, 3D, Fisica, Transizioni
NuovaGratis
La card di un vaso di vetro soffiato, mezzo pieno d’acqua, su un tavolo chiaro al sole: il puntatore è il sole. Il vaso getta un’ombra del colore del suo vetro e l’acqua, che è una lente, raccoglie la luce in una macchia chiara; l’ombra è calcolata tracciando i raggi in tre colori attraverso le fette del vaso. Scegliendo un altro vetro il vaso si riscalda, un bagliore lo risale dal piede e si raffredda nel colore nuovo; Add to bag lo avvolge nella plastica a bolle e chiude la giunta col nastro.
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 vase in the sun</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/imbue@5.3.0/opsz.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/hanken-grotesk@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the card of a hand-blown glass vase standing in the sun. The pointer is the sun: the vase throws a shadow in
the colour of its glass, with the bright line of light that the water inside focuses on the table. Another
glass heats the vase up again and it cools into the new colour; Add to bag wraps it in bubble wrap. The vase
and the light are worked out by the script -->
<article class="vase" aria-labelledby="vase-name" data-vase data-autoclic>
<div class="vase__shot" data-shot>
<canvas class="vase__canvas" role="img" aria-label="The Drift vase in sea glass, half full of water, standing in the sun on a pale table" data-canvas></canvas>
</div>
<div class="vase__body">
<div class="vase__head">
<h2 class="vase__name" id="vase-name">Drift vase</h2>
<p class="vase__price" data-price>€68</p>
</div>
<p class="vase__meta">Hand-blown glass · 24 cm</p>
<div class="glass" role="radiogroup" aria-labelledby="glass-label" data-glass>
<p class="glass__label" id="glass-label">Glass</p>
<p class="glass__name" aria-hidden="true" data-name>Sea glass</p>
<div class="glass__tiles">
<label class="tile">
<input class="tile__input" type="radio" name="glass" value="sea" checked>
<span class="tile__glass" aria-hidden="true"></span>
<span class="sr">Sea glass</span>
</label>
<label class="tile">
<input class="tile__input" type="radio" name="glass" value="amber">
<span class="tile__glass" aria-hidden="true"></span>
<span class="sr">Amber</span>
</label>
<label class="tile">
<input class="tile__input" type="radio" name="glass" value="cobalt">
<span class="tile__glass" aria-hidden="true"></span>
<span class="sr">Cobalt</span>
</label>
<label class="tile">
<input class="tile__input" type="radio" name="glass" value="smoke">
<span class="tile__glass" aria-hidden="true"></span>
<span class="sr">Smoke</span>
</label>
</div>
</div>
<div class="buy" data-buy>
<button class="add" type="button" data-add>
<span class="add__fill" aria-hidden="true" data-fill></span>
<span class="add__icon" aria-hidden="true">
<svg class="add__bag" viewBox="0 0 24 24" data-bag><path d="M5.6 8.4h12.8l-.9 11.2a1.2 1.2 0 0 1-1.2 1.1H7.7a1.2 1.2 0 0 1-1.2-1.1z"/><path d="M9 10.4V7.2a3 3 0 0 1 6 0v3.2"/></svg>
<svg class="add__tick" viewBox="0 0 24 24" data-tick><path d="M5.5 12.6l4.2 4.1 8.8-9.3"/></svg>
</span>
<span class="add__label" data-label>Add to bag</span>
</button>
<button class="undo" type="button" data-undo hidden>Undo</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.
39 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 vaso al sole» da Animorio e adattala al mio sitoIl vaso è un profilo di rivoluzione visto da una camera alzata di 26 gradi. Per ogni pixel lo script trova l’altezza che l’occhio vede per prima (le fette del vaso, ellissi posate dal labbro in giù) e quanto vetro attraversa lo sguardo: la parete davanti, l’acqua o l’aria, poi la parete dietro, oppure il fondo spesso. Il vetro toglie luce come il suo colore alla potenza del vetro attraversato (Beer-Lambert): chiaro in mezzo, profondo ai bordi e nel piede, mai nero, con un filo scuro al contorno. È uno strato che moltiplica il tavolo dietro, calcolato una volta per ogni vetro.
Sopra, uno strato che si somma a ogni fotogramma in cui il sole si muove: la stanza riflessa con Fresnel e una finestra alta a sinistra, il sole come un lampo stretto (Blinn, esponente 900) e come un alone largo, il riflesso dell’interno della parete dietro, che sott’acqua quasi sparisce perché fra vetro e acqua si riflette pochissimo, e il bagliore del vetro quando il sole gli sta dietro. La luce si somma in luce lineare, come differenza fra sRGB(dietro + luce) e sRGB(dietro): sommata in sRGB sbiancherebbe tutto.
Il vaso è tagliato in 56 fette orizzontali. In ogni fetta 220 raggi del sole, in rosso, verde e blu, attraversano il cerchio di vetro, l’acqua o l’aria e di nuovo il vetro: a ogni superficie si piegano con Snell, con l’indice che la fetta mostra a un raggio che scende obliquo (Bravais), e perdono luce con Fresnel e nel vetro col suo colore. Arrivano sul tavolo dopo un cammino uguale all’altezza della fetta per la cotangente dell’altezza del sole: dove si affollano c’è la luce dell’acqua, dove mancano c’è l’ombra. I tre colori hanno indici appena diversi (SPREAD) e l’ombra si ammorbidisce con la distanza (SOFT).
Le fette diventano due immagini piccole, una che scurisce il tavolo e una che aggiunge la luce raccolta, posate con una trasformazione affine lungo la direzione opposta al sole e schiacciate dalla prospettiva. Una parte della luce che passa il vetro soffiato (le bollicine e le onde del vetro fatto a mano) si sparge dentro l’ombra nel suo colore; sotto il piede l’ombra è ritagliata e il tavolo prende la luce del vetro spesso. I raggi si ritracciano solo quando l’altezza del sole cambia di più di un grado: il cammino sul tavolo invece si ricalcola a ogni fotogramma.
Ogni altezza del vaso ha la sua temperatura. Scegliendo un vetro, un fronte sale dal piede in HEAT[0] secondi: dietro di lui il vetro è caldo lungo una rampa, e dove il fronte è passato da poco il colore diventa quello nuovo, nascosto dal bagliore. Poi ogni altezza si raffredda in modo esponenziale, più in fretta dove il vetro è sottile, e il colore del bagliore viene da una scala che va dal rosso scuro al giallo bianco, più forte dove lo sguardo attraversa più vetro. Il tavolo intorno prende la luce calda.
Un foglio che segue il profilo del vaso un poco più largo: il suo bordo gira da destra a sinistra, poi la fine del foglio torna fino alla giunta e due strisce di nastro la chiudono, in WRAP secondi. Le bolle sono un reticolo esagonale sulla superficie, della stessa misura a ogni altezza, disegnate tutte insieme in pochi tracciati; ognuna ha il riflesso del sole dove la sua cupola guarda il mezzo fra il sole e l’occhio. L’ombra si fa lattiginosa e prende un puntino di luce per bolla.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
SUN | script.js | [232, 27] | Dove sta il sole quando nessuno punta: il giro intorno al vaso in gradi (0 davanti, 90 a destra, 180 dietro) e quanto è alto. |
HEIGHT | script.js | [17, 66] | Quanto sale il sole, in gradi: col puntatore lontano dal vaso e proprio sopra di lui. |
FOLLOW | script.js | [34, 0.9] | La molla che porta il sole dove sta il puntatore: quanto è rigida e quanto è frenata (1 = senza rimbalzi). |
WATER | script.js | 0.62 | Quanto è pieno d’acqua il vaso, da 0 a 1: l’acqua è la lente che raccoglie la luce. |
SPREAD | script.js | 3 | Quanto il vetro e l’acqua dividono la luce nei colori (1 = come il vetro vero). |
SOFT | script.js | 1.2 | Quanto è grande il sole, in gradi: più è grande, più le ombre sono morbide. |
HEAT | script.js | [0.55, 1.7] | Cambiando vetro: i secondi in cui il bagliore risale il vaso, e quelli in cui il vaso si raffredda. |
WRAP | script.js | 1.25 | I secondi in cui la plastica a bolle gira intorno al vaso e la giunta viene chiusa col nastro. |
WORDS | script.js | ['Wrapping it up', 'In your bag'] | Le scritte del pulsante mentre il vaso viene incartato, e dopo. |
Per la scheda di un prodotto di vetro o di cristallo in un negozio online: un vaso, una caraffa, un bicchiere, una bottiglia, una lampada; ovunque un oggetto trasparente abbia colori da scegliere e meriti di essere visto nella luce vera, e per il momento in cui finisce nel carrello.
La card è larga 340 pixel, o lo schermo meno 32, e la foto si ridisegna alla misura vera. Un dito appoggiato sulla foto mette lì il sole, e facendolo scorrere di lato il sole lo segue: la foto ha touch-action: pan-y, quindi in su e in giù la pagina scorre. Lasciato, il sole resta dove l’ha lasciato il dito. Le tessere sono di 44 pixel e i pulsanti alti 50.
Il sole resta fermo al suo posto e non segue il puntatore, e il vaso non arriva caldo. Cambiando vetro il colore nuovo arriva in una dissolvenza, senza bagliore; la plastica a bolle compare e se ne va in dissolvenza, senza girare; la tessera scelta è già in alto, senza salire, e le scritte del pulsante cambiano in dissolvenza.
GSAP 3.15.0, Imbue (font variabile) 5.3.0, Hanken Grotesk (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 22 KB; le librerie: GSAP 28 KB.
Provata il 6 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.