
L’indicatore a lancetta
Contatori, Fisica, SVG
NuovaGratis
Un contatore di kudos: un barattolo di vetro con le biglie occhio di gatto e un cartellino di carta legato al collo con lo spago, che porta il numero. Give kudos lascia cadere una biglia da sopra il bordo: entra, rimbalza sul vetro e sulle altre, rotola girando le sue alette e si posa, e quando tocca il numero sul cartellino scorre in su. Tenuto premuto versa una biglia dopo l’altra finché il barattolo è pieno; il meno pizzica la biglia in cima e la porta fuori. Il barattolo si trascina di lato e le biglie sbattono contro il vetro.
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 marble jar</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/bricolage-grotesque@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the marble jar: a kudos counter, a glass jar of cat's eye marbles with a paper tag tied round its neck. Give
kudos drops a marble in from above: it falls into the jar, bounces off the glass and the other marbles, rolls
and settles, and the number on the tag rolls on. Held, the button pours a stream until the jar is full; the
minus button lifts the top marble out. The jar can be dragged sideways to rattle them. The glass is drawn by
the script in two layers, behind and in front of the marbles, which are a canvas -->
<div class="kj" data-kj>
<div class="kj__scene" role="button" tabindex="0"
aria-label="The kudos jar. Drag it sideways, or press Enter, to rattle the marbles" data-scene>
<div class="kj__move" data-move>
<svg class="kj__layer" viewBox="-170 -380 340 396" aria-hidden="true" data-art="back"></svg>
</div>
<canvas class="kj__layer kj__marbles" aria-hidden="true" data-canvas></canvas>
<div class="kj__move" data-move>
<span class="kj__edge" data-edge></span>
<span class="kj__edge" data-edge></span>
<svg class="kj__layer" viewBox="-170 -380 340 396" aria-hidden="true" data-art="front"></svg>
<div class="kj__tag" aria-hidden="true" data-tag>
<svg class="kj__string" viewBox="0 0 64 26" aria-hidden="true">
<path class="kj__string-back" d="M32 0C30.5 8 29.4 16 30 25.5"/>
<path class="kj__string-front" d="M32 0C33.6 8 34.8 16 34 25.5"/>
</svg>
<div class="kj__card">
<span class="kj__hole"></span>
<span class="kj__kicker">Kudos</span>
<span class="kj__count" data-count></span>
<span class="kj__for" data-for>for Marta</span>
</div>
</div>
</div>
</div>
<div class="kj__actions">
<button class="kj__btn kj__btn--less" type="button" aria-label="Take a kudos back" data-less>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M6.5 12h11"/></svg>
</button>
<button class="kj__btn kj__btn--more" type="button" aria-describedby="kj-hint" data-more data-autoclic>
<span class="kj__word" data-word>Give kudos</span>
<svg class="kj__plus" viewBox="0 0 24 24" aria-hidden="true"><path d="M12 6.5v11M6.5 12h11"/></svg>
</button>
</div>
<p class="sr" id="kj-hint">Hold to pour.</p>
<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.
47 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 barattolo delle biglie» da Animorio e adattala al mio sitoOgni biglia è un cerchio con posizione, velocità, angolo e velocità di rotazione, in unità del disegno (poco più di un pixel). Il mondo avanza sul ticker di GSAP a passi fissi di 1/480 di secondo (un fotogramma lento conta al massimo per 1/30): la gravità (GRAVITY) dà velocità, poi si trovano i contatti fra le biglie e con l’interno del barattolo, una scatola con gli angoli in basso arrotondati e aperta in alto.
Ogni contatto si risolve con un impulso lungo la linea che unisce i centri: non può tirare, toglie la velocità con cui due biglie si avvicinano e ne restituisce BOUNCE (BOUNCE_GLASS col vetro), ma solo nell’urto, cioè quando il contatto è nuovo e le biglie si vengono incontro a più di 45 unità al secondo: un contatto che c’era già al passo prima è un appoggio e non rimbalza mai, così le biglie si posano invece di saltellare. Di traverso c’è l’attrito, limitato da FRICTION volte la spinta: agisce sul punto di contatto e fa girare le biglie, che così rotolano invece di scivolare. Le pareti e il fondo si muovono col barattolo, e la loro velocità entra nel conto: è così che le biglie sentono il barattolo scosso.
Le spinte di ogni contatto si ricordano da un passo all’altro e si riusano come prima stima (warm starting): un mucchio di quaranta biglie si regge senza tremare. Dopo le spinte, quello che resta sovrapposto si separa spostando le biglie, senza toccare le velocità. Quando ogni biglia è stata quasi ferma per un terzo di secondo il mondo si addormenta: niente si ridisegna finché non arriva una biglia, se ne toglie una o si scuote il barattolo.
Ogni tipo di biglia è tre immagini disegnate una volta sola per la densità dello schermo: il vetro tinto, le alette (pale a punta attorcigliate, scure al centro e chiare in punta, con qualche bollicina) e sopra il bordo scuro, la luce raccolta in basso a destra e il riflesso in alto a sinistra. A ogni fotogramma si posano con drawImage, e solo le alette girano con la biglia. Prima, sul fondo, l’ombra di ognuna e una luce del suo colore.
Il barattolo è SVG in due strati: dietro la tela l’ombra sul foglio, il vetro di fondo, la metà lontana dell’orlo e il pavimento; davanti il fondo spesso, i fianchi visti di taglio, i riflessi, la metà vicina dell’orlo e lo spago, con le torsioni disegnate a trattini obliqui. Una biglia che cade attraversa la bocca passando davanti all’orlo lontano e dietro a quello vicino. Il barattolo trascinato segue la mano su una molla, e il cartellino è un pendolo che ne sente l’accelerazione.
Il conteggio vero cambia subito al clic (il pulsante, il limite, la frase letta), ma il cartellino conta le biglie arrivate: al primo contatto di una biglia nuova la cifra che cambia scorre, la vecchia esce in alto e la nuova entra con back.out. Il numero di biglie che il barattolo tiene si ricava dalla loro misura, così nemmeno nel Playground il mucchio passa mai l’orlo.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
NAME | script.js | 'Marta' | Chi riceve i kudos: si legge sul cartellino e nella frase detta a voce. |
START | script.js | 12 | Le biglie già nel barattolo quando si apre la pagina, posate al loro posto. |
MAX | script.js | 40 | Quante biglie tiene il barattolo; con biglie più grosse ne tiene meno, e non trabocca mai. |
HOLD | script.js | [0.32, 0.12] | Tenendo premuto il pulsante: dopo quanto comincia a versare, e ogni quanto arriva una biglia, in secondi. |
GRAVITY | script.js | 2600 | La gravità, in unità del disegno al secondo quadrato: più alta, le biglie cadono e si posano più in fretta. |
BOUNCE | script.js | 0.42 | Quanto rimbalza una biglia su un’altra (0 = niente, 1 = tutto). |
BOUNCE_GLASS | script.js | 0.33 | Quanto rimbalza una biglia sul vetro del barattolo. |
FRICTION | script.js | 0.3 | L’attrito fra vetro e vetro: è quello che fa rotolare le biglie invece di farle scivolare. |
ROLLING | script.js | 1.4 | Quanto in fretta una biglia che rotola perde il suo giro, al secondo. |
SIZE | script.js | [16, 18.4] | Il raggio delle biglie, la più piccola e la più grande, in unità del disegno (da 10 a 21). |
SHAKE | script.js | 32 | Fin dove si può trascinare il barattolo da ciascun lato. |
Per contare qualcosa che si accumula e fa piacere vedere crescere: i kudos o i ringraziamenti in un team, le stelle date a un progetto, i punti di una raccolta, le mance, i giorni di fila di un’abitudine, i voti di una piccola classifica. Sta bene nella scheda di una persona, in una bacheca interna, in un’app per le squadre o per la scuola, dovunque un numero che sale debba sembrare un premio e non una statistica.
A 390 pixel il barattolo prende tutta la larghezza e i pulsanti restano alti 58; niente sfora di lato e la tela usa la densità dello schermo, quindi le biglie restano nitide. Il dito fa come il mouse: un tocco dà una biglia, tenuto premuto versa, il barattolo si trascina di lato col dito (lo scorrimento in verticale della pagina resta libero) e un tocco sul vetro è un colpetto. Il tocco lungo non apre menu e due tocchi veloci non ingrandiscono la pagina.
Niente cadute, rimbalzi, rotolamenti o scosse: la biglia nuova compare già posata dove sarebbe arrivata (il mondo fa i suoi passi tutti insieme, senza disegnarli) e sfuma dentro; quella tolta sfuma dove stava e le altre sono già al loro posto. Il numero cambia con una dissolvenza invece di scorrere, il cartellino non oscilla e il barattolo non si trascina.
GSAP 3.15.0, Bricolage Grotesque (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 19 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.