
Il pulsante da far scorrere
Pulsanti, Fisica, Transizioni
NuovaGratis
Il Checkout di un negozio di alimentari come il nastro della cassa: la pillola è il bancone, lungo il suo bordo corre il nastro di gomma a coste, sopra stanno quattro piccoli prodotti disegnati (una baguette, un vasetto di miele col coperchio a quadretti, una mela, un cartone di latte) e sopra il nastro pende il lettore. Al clic il nastro parte: i prodotti avanzano e sentono la spinta come le cose vere, il latte e il miele si inclinano indietro sulla partenza e in avanti sulla frenata, la mela rotola un poco indietro e recupera. Passando sotto il lettore una linea rossa li attraversa, il lettore lampeggia e il totale sale a ogni prodotto con le cifre che girano su tamburi; alla fine Paid · €18.70. Un altro clic riporta i prodotti all'inizio del nastro, uno dopo l'altro con un saltello.
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 checkout belt 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 checkout belt button: the Checkout of a grocery shop, as the belt at the till. The pill is the counter, and
along its top runs the rubber belt; on it stand four small groceries (a baguette, a jar of honey, an apple, a
carton of milk) and over it hangs the reader. A click starts the belt: the groceries ride along, tipping with
the belt's push as real things do, and pass under the reader, where a red scan line crosses each one; the total
rolls up on its digits with every item, then Paid. Another click puts the groceries back on the belt -->
<div class="till" data-till>
<canvas class="till__art" aria-hidden="true" data-art></canvas>
<button class="till__btn" type="button" data-btn data-autoclic>
<span class="till__faces">
<span class="till__face" data-face="rest">
<span class="till__word" data-label-text>Checkout</span>
<span class="till__items" data-items-text>4 items</span>
</span>
<span class="till__face till__face--sum" data-face="sum" aria-hidden="true">
<span class="till__state">
<svg class="till__tick" viewBox="0 0 16 16" aria-hidden="true" data-tick><path d="M3.2 8.4l3 3 6.6-6.8"/></svg>
<span class="till__says" data-says>
<span class="till__say" data-scan-text>Scanning</span>
<span class="till__say till__say--paid" data-paid-text>Paid</span>
</span>
</span>
<span class="till__dot">·</span>
<span class="till__sum" aria-hidden="true" data-sum></span>
</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.
27 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 nastro della cassa» da Animorio e adattala al mio sitoTutto quello che si muove è disegnato su un canvas più largo del componente di 12 pixel per parte, per il rigonfiamento e l'ombra. La pillola è un rettangolo arrotondato col suo gradiente; dentro, ritagliata dalla pillola, la fascia di gomma con le coste ogni 5,5 pixel, spostate della corsa del nastro modulo il passo. Vicino alle punte la posizione di una costa passa per un seno, x = punta ± r · sin(...), così le coste si stringono come sul rullo. Il rigonfiamento e lo schiacciamento sono due numeri tweenati da GSAP, e i prodotti stanno sempre sul filo di sopra della pillola di quel momento: premendo si abbassano con lei.
La corsa del nastro è un tween power2.inOut di RUN secondi. A ogni fotogramma se ne leggono la velocità e l'accelerazione (differenze finite, filtrate), e l'accelerazione spinge ogni prodotto all'indietro. Il latte e il miele hanno un angolo su una molla smorzata (φ'' = −ω²φ − 2ζωφ' − k·a), e girano intorno allo spigolo di dietro quando si inclinano indietro e a quello davanti quando si inclinano in avanti; la mela e la baguette hanno uno scivolamento sulla loro molla, e la mela ruota di scivolamento diviso raggio, cioè rotola. Passi di 1/240 di secondo; l'inclinazione non va oltre 0,3 radianti.
Mentre il nastro corre, sotto il lettore si disegna in modalità lighter un ventaglio di luce rossa che si stringe e sopra una linea di un pixel con la sua ombra luminosa. Su un prodotto che la attraversa si disegna di nuovo, più chiara, per l'altezza del prodotto: la linea sembra posarsi sopra. Quando il centro di un prodotto passa la linea il prodotto è letto: un tween porta il lampo da 1 a 0 (la finestrella e la linea si accendono di più) e il totale sale del suo prezzo.
Il totale ha quattro tamburi (decine, unità, decimi, centesimi), ognuno una colonna con le cifre da 0 a 9 due volte. Un tamburo gira sempre in avanti: da 7 a 2 va a 12, cioè passa per 8, 9, 0, 1, e alla fine si rimette sul 2 del primo giro senza che si veda. I tamburi a destra girano un poco più svelti. Il tamburo delle decine è largo zero finché non serve e si allarga con back.out quando il totale passa i dieci euro.
Al secondo clic ogni prodotto passa su un percorso suo: x dal punto dove sta a quello d'inizio, altezza 4 · h · t · (1 − t), cioè una parabola, e una piccola rotazione (la mela gira di più). Sotto di loro il nastro viene rimesso a zero in un colpo solo, perché finché un prodotto è in volo la sua posizione non dipende dal nastro. Atterrando ognuno si schiaccia e torna su con tre fotogrammi chiave.
Due facce sovrapposte: a riposo, e Scanning o Paid col totale. La casella di Scanning e Paid prende la larghezza della parola che si vede, così la spunta, la parola e il totale restano vicini. Il pulsante è un button vero, aria-disabled mentre il nastro corre; la zona aria-live dice il totale a ogni prodotto e poi Paid. €18.70., e da pagato l'aria-label dice anche Put the items back. Il nastro corre 2,6 secondi, poco meno dei 2,8 fra un clic e l'altro dell'anteprima: il secondo clic cade nell'attesa e Paid resta in vista un giro intero.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
LABEL | script.js | Checkout | La parola a riposo; si allarga sotto il puntatore. |
SCANNING | script.js | Scanning | La parola mentre il nastro corre. |
PAID | script.js | Paid | La parola alla fine, con la spunta. |
CURRENCY | script.js | € | Il segno davanti al totale. |
PRICES | script.js | [3.2, 11.9, 1.2, 2.4] | I prezzi della baguette, del miele, della mela e del latte: il totale è la loro somma (sotto i cento euro). |
RUN | script.js | 2.6 | I secondi che il nastro corre. |
TIP | script.js | 1 | Quanto i prodotti si inclinano e rotolano con la spinta del nastro: 0 stanno fermi, 2 ondeggiano molto. |
JOG | script.js | 8 | Di quanti pixel il nastro scatta in avanti sotto il puntatore: 0 resta fermo. |
Per il pulsante che chiude l'ordine di un supermercato online, di una spesa a domicilio, di una gastronomia o di un mercato di quartiere: il nastro e il totale che sale dicono «sto facendo il conto» meglio di una rotellina. I prodotti si possono ridisegnare con quelli del negozio. Il pagamento qui è simulato: in un sito vero il totale e la conferma arrivano dal tuo server o dal servizio di pagamento.
Il bancone è largo 330 pixel e si stringe se lo schermo è più stretto: i prodotti, il lettore e la corsa del nastro si ricalcolano sulla larghezza. Il tocco schiaccia il bancone, i prodotti si abbassano con lui, e paga.
Il nastro non corre e i prodotti non si inclinano; il bancone non si gonfia e la parola non si allarga. Al clic i prodotti svaniscono all'inizio del nastro e riappaiono già oltre il lettore, e Paid · €18.70 arriva in dissolvenza, senza linea rossa né cifre che girano. Un altro clic li fa svanire e riapparire all'inizio.
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 10 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.