
Il pulsante da far scorrere
Pulsanti, Fisica, Transizioni
NuovaGratis
Un biglietto col regalo sotto una lamina d’argento: una moneta la gratta via lungo il suo percorso e i frammenti cadono girando con la gravità; passata la metà, il resto si stacca da solo in una pioggia di frammenti e il regalo salta fuori con un lampo di luce.
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 scratch card</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/chivo@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the scratch card: a coin scratches the foil away, flakes fall from it, and past half the rest comes off by
itself and the gift jumps out -->
<section class="gift" aria-labelledby="gift-title" data-gift data-autoclic>
<h2 class="gift__title" id="gift-title">Your welcome gift</h2>
<div class="ticket" data-ticket>
<div class="ticket__prize" aria-hidden="true" data-prize>
<p class="ticket__big" data-big></p>
<p class="ticket__small" data-small></p>
<div class="ticket__code">
<span class="ticket__chip" data-code></span>
<button class="ticket__copy" type="button" tabindex="-1" data-copy>Copy code</button>
</div>
</div>
<canvas class="ticket__foil" aria-hidden="true" data-foil></canvas>
<span class="ticket__coin" aria-hidden="true" data-coin></span>
</div>
<button class="gift__reveal" type="button" data-reveal>Reveal without scratching</button>
<p class="sr" aria-live="polite" data-live></p>
</section>
</main>
<canvas class="flakes" aria-hidden="true" data-flakes></canvas>
<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.
16 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 «Gratta e scopri» da Animorio e adattala al mio sitoLa lamina è un canvas sopra il regalo, dipinto con una sfumatura d’argento, righe diagonali e la scritta incisa (chiara sotto e scura sopra). La moneta la toglie con destination-out: un cerchio di raggio BRUSH con un bordo morbido (un gradiente radiale), stampato lungo il percorso a passi di un terzo del raggio, così uno strappo veloce non lascia buchi.
Ogni 0,12 secondi di grattata si leggono i pixel della lamina (getImageData, con willReadFrequently) su una griglia di 48 per 24 punti: oltre REVEAL di punti trasparenti, il resto si stacca da solo.
A ogni tocco della moneta si staccano FLAKES frammenti: rettangolini d’argento con una spinta nella direzione della moneta, una gravità (GRAVITY) e una rotazione, disegnati su un canvas grande quanto la finestra; mentre girano la loro larghezza si stringe e si allarga (mostrano il taglio) e svaniscono in poco meno di due secondi.
Staccata la lamina (svanisce e cresce un poco), i pezzi del regalo arrivano uno dopo l’altro da 0,7 con back.out, e sulle parole grandi passa una striscia di luce: uno sfondo a gradiente ritagliato sul testo (background-clip text) che scorre da destra a sinistra.
Reveal without scratching mostra il regalo senza grattare e porta la focalizzazione su Copy code; finché la lamina c’è il regalo è aria-hidden, poi una regione aria-live lo dice. Copy code copia il codice negli appunti. Un clic da script (l’anteprima della libreria) gratta la lamina a zig-zag con la moneta finché il regalo esce, e la volta dopo rimette la lamina come un adesivo, da sinistra.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
BRUSH | script.js | 22 | Il raggio, in pixel, della moneta che gratta. |
REVEAL | script.js | 0.5 | Quanta lamina va grattata perché il resto si stacchi da solo. |
FLAKES | script.js | 2 | Quanti frammenti si staccano a ogni tocco della moneta. |
GRAVITY | script.js | 900 | Quanto in fretta cadono i frammenti, in pixel al secondo al quadrato. |
PRIZE | script.js | ['20% off', 'on your first stay', 'WELCOME20'] | Il regalo: la scritta grande, quella piccola e il codice. |
Per un buono di benvenuto, un premio in una newsletter, il risultato di un concorso, una sorpresa alla fine di un acquisto, un codice sconto da scoprire.
Si gratta col dito senza far scorrere la pagina (touch-action none sul biglietto) e senza il menu del tocco lungo; la moneta non c’è, perché la moneta è il dito; la lamina non si ridipinge quando le barre di Safari compaiono o spariscono.
La lamina si gratta lo stesso, ma senza frammenti; passata la metà sparisce di colpo e il regalo compare senza saltare e senza la striscia di luce, e la lamina torna senza scorrere.
GSAP 3.15.0, Chivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 6,8 KB; le librerie: GSAP 28 KB.
Provata il 3 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.