
L’indicatore a lancetta
Contatori, Fisica, SVG
NuovaGratis
Quanti ospiti a tavola, contati su una fila di pallottoliere: dieci perline laccate su un’asta d’ottone, e quelle spinte a destra sono gli ospiti. Il più e il meno danno un colpetto a un capo dell’asta: il colpo attraversa le perline come in un pendolo di Newton, l’ultima parte, scivola, urta le altre e rimbalza appena, e il numero gira sui suoi rulli quando arriva. Le perline si possono anche trascinare e lanciare.
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 abacus stepper</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/newsreader@5.3.0/opsz.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- how many guests at a table, as one row of an abacus: lacquered beads on a brass rod in a black lacquer frame,
and the beads pushed to the right are the guests. Plus and minus fire a little hammer at one end of the rod:
the knock runs through the beads like a Newton's cradle and the last one shoots across. The beads can also be
dragged and thrown. The number's reels, the beads and the rod are made by the script -->
<div class="guests" data-guests>
<div class="guests__head" aria-hidden="true">
<span class="guests__count" data-count></span>
<span class="guests__note" data-note></span>
</div>
<div class="abacus" data-abacus>
<button class="abacus__btn" type="button" aria-label="Remove a guest" data-less>
<span class="abacus__disc" aria-hidden="true">
<svg viewBox="0 0 24 24"><path d="M6.5 12h11"/></svg>
</span>
</button>
<div class="abacus__track" role="spinbutton" tabindex="0" aria-label="Guests" aria-valuemin="1" aria-valuemax="10" aria-valuenow="2" aria-valuetext="2 guests" data-track>
<div class="abacus__groove" data-groove>
<span class="abacus__layer" data-shades></span>
<svg class="abacus__rod" aria-hidden="true" data-rod></svg>
<span class="abacus__layer" data-beads></span>
</div>
</div>
<button class="abacus__btn" type="button" aria-label="Add a guest" data-more data-autoclic>
<span class="abacus__disc" aria-hidden="true">
<svg viewBox="0 0 24 24"><path d="M6.5 12h11M12 6.5v11"/></svg>
</span>
</button>
</div>
<p class="sr" aria-live="polite" data-said></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.
34 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 contatore a pallottoliere» da Animorio e adattala al mio sitoOgni perlina ha una posizione e una velocità lungo l’asta, in pixel. Il conto gira sul ticker di GSAP a passi di 1/600 di secondo al massimo (e un fotogramma lento conta per 1/30): un attrito viscoso (FRICTION) toglie velocità, una spinta costante di 650 pixel al secondo quadrato riporta ogni perlina verso il suo mucchio, come se l’asta scendesse appena verso i due capi, e le rondelle sono molle smorzate (RUBBER) con l’ottone dietro, che ferma una perlina se la gomma è schiacciata del tutto. Quando niente si muove il ciclo si ferma e non ridisegna.
Due perline che si toccano e si vengono incontro si urtano: l’impulso fra loro toglie la velocità con cui si avvicinano e ne restituisce BOUNCE, metà a ciascuna (sotto i 24 pixel al secondo non rimbalzano più, così si posano). Le coppie si risolvono una alla volta, ripassando la fila finché nessuna si avvicina: un colpo cammina così lungo una fila di perline che si toccano ed esce dall’ultima, che è il pendolo di Newton. Una perlina tenuta in mano ha massa infinita: spinge le altre e non cede.
Il più colpisce la prima perlina del mucchio di sinistra, il meno l’ultima di quello di destra. Lungo una fila di n perline il colpo conserva (1 + BOUNCE) / 2 di sé a ogni coppia, quindi la perlina che parte riceve V · ((1 + BOUNCE) / 2)^(n − 1): lo script sceglie V perché arrivi all’altro mucchio a ARRIVE pixel al secondo, aggiungendo FRICTION per la distanza da percorrere, perché l’attrito viscoso toglie velocità in proporzione alla strada fatta.
Ogni perlina ha due posti, nel mucchio di sinistra e in quello di destra, e appartiene al lato il cui posto è più vicino: il confine è a metà fra i due. Le perline non possono passarsi, quindi questo dà sempre una fila a sinistra e una a destra. Coi pulsanti e coi tasti il lato lo decide il comando; con le mani lo si legge dalle posizioni, e il numero cambia solo quando tutto è fermo.
Le decine e le unità sono due strisce di undici cifre in una finestra sfumata in alto e in basso. Le muove un numero solo, che va dal conto vecchio al nuovo: le unità girano con lui, le decine solo mentre le unità passano da 9 a 0, come in un contachilometri. Il numero arriva con back.out e la sua forza si sceglie a ogni salto perché vada oltre di un quinto di cifra, qualunque sia la distanza.
Al limite il martelletto batte sordo: la cornice riceve un colpo verso sinistra e torna su una molla smorzata del tutto; le perline, dentro, sentono la sua accelerazione al contrario e vengono gettate contro il fermo di destra. L’asta è un oscillatore smorzato che ogni urto spinge un poco, al massimo un pixel: le perline la seguono lungo una parabola, più al centro che ai capi.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
MIN | script.js | 1 | Il numero più piccolo di ospiti. |
MAX | script.js | 10 | Il numero più grande di ospiti, che è anche il numero di perline sull’asta (da 3 a 12). |
START | script.js | 2 | Gli ospiti quando si apre la pagina. |
ARRIVE | script.js | 380 | Quanto veloce arriva una perlina all’altro mucchio, in pixel al secondo: quanto forte urta. |
BOUNCE | script.js | 0.9 | Quanto di un urto passa da una perlina all’altra (1 = tutto, come in un pendolo di Newton). |
FRICTION | script.js | 3.2 | Quanto in fretta rallenta una perlina che scivola sull’asta. |
RUBBER | script.js | [9000, 0.36] | Le rondelle di gomma ai capi dell’asta: quanto sono rigide e quanto frenano (1 = senza rimbalzo). |
FLEX | script.js | 1 | Quanto si flette l’asta negli urti (0 = un’asta rigida). |
HOLD | script.js | [0.42, 0.17, 0.07] | Tenendo premuto un pulsante: dopo quanto comincia a ripetere, il primo intervallo e il più corto, in secondi. |
WORD | script.js | ['guest', 'guests'] | La parola sotto il numero, per uno e per più di uno. |
Per scegliere quante persone o quante cose quando il numero è piccolo e conta: ospiti a tavola, posti di una prenotazione, notti, porzioni, biglietti, pezzi nel carrello. Sta bene dove si vuole un gesto fisico e calmo, da oggetto vero, come la prenotazione di un ristorante o di un’enoteca, e dove le cinque perline di un colore aiutano a leggere il numero a colpo d’occhio.
Sotto i 520 pixel il numero sale sopra l’asta e la cornice prende tutta la larghezza, così le perline restano grosse e hanno strada per correre; a 390 pixel niente sfora. Il dito fa come il mouse: un tocco su un pulsante conta uno, tenuto premuto ripete sempre più in fretta, una perlina si trascina e si lancia (lo scorrimento in verticale della pagina resta libero) e un tocco su una perlina la manda dall’altra parte. Il tocco lungo non apre menu e due tocchi veloci non ingrandiscono la pagina.
Niente voli, rimbalzi, colpi della cornice, flessioni dell’asta o martelletti che si caricano: la perlina che cambia lato si dissolve dove era e ricompare al suo posto nell’altro mucchio, e il numero cambia con una dissolvenza invece di girare. Le perline si possono ancora trascinare; lasciate, vanno al loro posto in dissolvenza.
GSAP 3.15.0, Newsreader (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 15 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.