
Il pulsante a strati
Pulsanti, Hover, Fisica
Gratis
Il Get tickets di un piccolo cinema, nello stile ricco: nella punta tonda della pillola rossa sta un carrellino del popcorn con la vetrina, la tenda a strisce e il pentolino d'acciaio. Al clic i chicchi scoppiano uno dopo l'altro, sbattono sul vetro e si ammucchiano, il pentolino si inclina, lo sportello si apre e il popcorn trabocca sulla pillola; poi da dietro esce un biglietto strappato.
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 popcorn cart button</title>
<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 popcorn cart button: the Get tickets of a small cinema, with a popcorn cart standing in the round left end
of the pill. Glass case with a gold frame, a striped canopy, a warm lamp and a steel kettle hanging inside.
A click heats the kettle: the kernels pop one after the other, fly against the glass and pile up; the kettle
tips to empty itself, the little door swings open and the popcorn spills onto the pill, one piece bouncing
away. Then a torn ticket rises from behind the pill: Enjoy the show. A second click sweeps it all away -->
<div class="pop" data-pop>
<span class="pop__ticket" aria-hidden="true" data-ticket>
<svg viewBox="0 0 92 46" width="92" height="46">
<defs>
<linearGradient id="tk-paper" x1="0" y1="0" x2="0" y2="1">
<stop offset="0" style="stop-color:var(--ticket)"/>
<stop offset="1" style="stop-color:var(--ticket-deep)"/>
</linearGradient>
</defs>
<path d="M4 3 H80 L84 6 L80 9 L84 12 L80 15 L84 18 L80 21 L84 24 L80 27 L84 30 L80 33 L84 36 L80 39 L84 42 L80 43 H4 a3 3 0 0 1 -3 -3 V6 a3 3 0 0 1 3 -3 Z" fill="url(#tk-paper)"/>
<path d="M80 3 H4 a3 3 0 0 0 -3 3 V40 a3 3 0 0 0 3 3 H80" fill="none" style="stroke:var(--gold)" stroke-opacity="0.55" stroke-width="0.8"/>
<rect x="5" y="7" width="67" height="9" rx="1.5" style="fill:var(--red)"/>
<text x="38.5" y="14" text-anchor="middle" class="pop__ticket-band">ADMIT ONE</text>
<text x="38.5" y="29" text-anchor="middle" class="pop__ticket-film" data-ticket-film>Velvet Hour</text>
<text x="38.5" y="38" text-anchor="middle" class="pop__ticket-seat" data-ticket-seat>Screen 2 · Row F · Seat 7</text>
<path d="M70 7 v32" style="stroke:var(--red)" stroke-opacity="0.35" stroke-dasharray="1.5 2" stroke-width="0.8"/>
</svg>
</span>
<button class="pop__btn" type="button" data-btn data-autoclic>
<span class="pop__fill" aria-hidden="true"></span>
<span class="pop__faces">
<span class="pop__face" data-face="rest">
<span class="pop__word" data-label-text>Get tickets</span>
<span class="pop__time" data-time-text>Fri 9:40</span>
</span>
<span class="pop__face pop__face--busy" data-face="busy" aria-hidden="true">
<span class="pop__shine" data-busy-text>Popping…</span>
</span>
<span class="pop__face pop__face--done" data-face="done" aria-hidden="true">
<span class="pop__done" data-done-text>Enjoy the show</span>
</span>
</span>
</button>
<canvas class="pop__art" aria-hidden="true" data-art></canvas>
<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.
35 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 del carrello del popcorn» da Animorio e adattala al mio sitoIl carrello, il pentolino, lo sportello e il popcorn sono disegnati su un canvas che copre il componente e 40 pixel sopra, per la bandierina e i pezzi che volano: ruote coi raggi, il mobiletto con le sfumature e la targa, il fondo caldo della vetrina con il cono della lampada, la tenda a strisce tagliata a trapezio col bordo a festoni, i riflessi a sbieco sul vetro e il telaio d'oro disegnati dopo il popcorn, così il popcorn sta dietro il vetro. La pillola, le parole e il biglietto sono HTML e SVG sotto il canvas, che non prende il puntatore.
Ogni pezzo ha da cinque a sette lobi attorno a un lobo centrale, con distanze e raggi a caso, disegnati tre volte: l'ombra spostata in basso, il bianco, il burro su qualche lobo e la luce solo su quelli in alto, più un pezzetto di buccia. Quando nasce parte a un quarto della sua misura, con il seme arancio che si vede, e si gonfia in 0,22 secondi con back.out(3.2): lo scoppio.
Per le botte ogni pezzo è un cerchio di 5,2 pixel: gravità GRAVITY, rimbalzo BOUNCE sulle pareti del vetro e sul fondo, attrito sul fondo, e fra i pezzi tre passate di separazione e un urto fra masse uguali, così il mucchio sta in piedi. Il passo del fotogramma è limitato a 1/30 di secondo e diviso in due. Quando lo sportello è aperto la parete destra sotto la cerniera non c'è più: i pezzi escono, e fuori il suolo è il bordo della pillola, tondo nella sua punta sinistra. Tutto il caso viene da un generatore con un seme fisso, quindi ogni spettacolo è uguale.
Una timeline GSAP scalda il pentolino, apre i coperchi e chiama gli scoppi a intervalli che si accorciano; poi inclina il pentolino di TILT gradi attorno all'asta, che versa gli ultimi chicchi con una spinta verso destra, apre lo sportello con back.out e dà una spinta al pezzo più vicino all'uscita perché rimbalzi lontano. Alla fine il biglietto sale da dietro la pillola con back.out(2.2) e un giro di 7 gradi. SPEED cambia il timeScale di tutto.
È un button: Invio e Spazio fanno lo stesso del clic, il fuoco dei tasti ha l'anello e fa tremare il pentolino come il mouse, aria-busy e aria-disabled mentre scoppia, e una regione aria-live dice Popping your popcorn e poi Tickets ready. Le tre scritte sono una sopra l'altra e la pillola è larga quanto la più lunga, misurata dopo l'arrivo del carattere.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
LABEL | script.js | Get tickets | Le parole a riposo. |
TIME | script.js | Fri 9:40 | L'orario dello spettacolo accanto. |
BUSY | script.js | Popping… | Le parole mentre il popcorn scoppia. |
DONE | script.js | Enjoy the show | Le parole quando il biglietto è uscito. |
FILM | script.js | Velvet Hour | Il film stampato sul biglietto. |
SEAT | script.js | Screen 2 · Row F · Seat 7 | La sala, la fila e il posto sul biglietto. |
KERNELS | script.js | 34 | Quanti chicchi scoppiano, da 16 a 40. |
GRAVITY | script.js | 1500 | Quanto forte cade il popcorn, in pixel al secondo al quadrato. |
BOUNCE | script.js | 0.32 | Quanto rimbalza il popcorn. |
TILT | script.js | 34 | Quanto si inclina il pentolino per svuotarsi, in gradi. |
SPEED | script.js | 1 | La velocità di tutto lo spettacolo. |
Per il pulsante dei biglietti di un cinema, di un drive-in, di una rassegna all'aperto o di una serata di film, o per l'ordine dello spuntino in un'app di cinema.
Il componente è largo quanto le parole, fra 300 pixel e lo schermo meno 32, e alto 140 con la pillola di 60. Senza hover, il dito che si appoggia fa tremare il pentolino come il mouse, e il tocco non aspetta il doppio tocco.
Niente scoppi che volano, niente tremore e niente sportello che si spalanca: al clic il mucchio di popcorn compare già fermo nella vetrina con una dissolvenza, e il biglietto compare al suo posto senza salire. Le parole cambiano svanendo.
GSAP 3.15.0, Mona Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 12 KB; le librerie: GSAP 28 KB.
Provata il 22 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.