
L’indicatore a lancetta
Contatori, Fisica, SVG
NuovaGratis
La lunghezza di un tavolo regolata con un metro a nastro: si tira il gancio d’ottone, il nastro d’acciaio stampato esce dalla cassa gialla con i numeri che scorrono, e il tavolo disegnato sopra si allunga con la sua estremità sempre sopra il gancio. Lasciato, si ferma sul centimetro intero; col blocco tolto il nastro rientra di scatto, i numeri si sfocano e il gancio sbatte contro la bocca.
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 tape measure slider</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/archivo@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the tape measure slider: the length of a table, set with a retractable steel tape measure. The table is drawn
above it with its length on a dimension line, and its right end always stands over the brass hook. Pull the
hook and the printed tape slides out of the yellow case, the numbers travel past the mouth and the table grows;
let go and it settles on a whole centimetre. With the red lock slider off, the tape whips back into the case
and the hook clacks against the mouth. The chips glide it to a length for four, six or eight people -->
<div class="tm" data-tm data-lock="on">
<div class="tm__rig" data-rig>
<!-- the drawing: the table, its dimension line with the length, and the tape measure; the script draws it to
the width it gets -->
<svg class="tm__art" aria-hidden="true" focusable="false" data-art></svg>
<!-- the hook is the slider's thumb: an empty handle that the script keeps over the brass hook -->
<div class="tm__hook" role="slider" tabindex="0" aria-label="Table length" aria-orientation="horizontal"
aria-valuemin="80" aria-valuemax="240" aria-valuenow="160" aria-valuetext="160 centimetres" data-hook></div>
</div>
<div class="tm__controls">
<div class="tm__lockrow">
<button class="tm__lock" type="button" aria-pressed="true" aria-describedby="tm-hint" data-lock-btn>
<svg class="tm__padlock" viewBox="0 0 20 20" aria-hidden="true">
<path class="tm__shackle" d="M6.2 9V6.6a3.8 3.8 0 0 1 7.6 0V9"/>
<rect class="tm__body" x="4" y="8.6" width="12" height="9" rx="2.2"/>
<path class="tm__keyhole" d="M10 11.6v2.6"/>
</svg>
<span>Lock</span>
<span class="tm__badge" aria-hidden="true" data-badge></span>
</button>
<span class="tm__hint" id="tm-hint" data-hint></span>
</div>
<!-- the chips: data-preset is the length each one sets, and the script writes it under the name -->
<div class="tm__presets" role="group" aria-label="Table sizes">
<button class="tm__chip" type="button" data-preset="120">Seats 4<span class="tm__cm" data-cm></span></button>
<button class="tm__chip" type="button" data-preset="180" data-autoclic>Seats 6<span class="tm__cm" data-cm></span></button>
<button class="tm__chip" type="button" data-preset="230">Seats 8<span class="tm__cm" data-cm></span></button>
</div>
</div>
<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 cursore del metro» da Animorio e adattala al mio sitoLa scala viene dalla larghezza: k pixel per centimetro, perché la lunghezza massima (MAX) stia tutta nel disegno. La bocca del metro sta a MIN·k dall’estremità sinistra del tavolo, così quando il gancio è contro la bocca il tavolo è lungo MIN, e la sua estremità destra è sempre esattamente sopra il gancio. Il tavolo, la quota e la linea tratteggiata si ridisegnano dalla stessa misura; la cassa si rimpicciolisce se lo spazio a sinistra della bocca è poco.
Lo stato è uno solo: quanto acciaio è fuori dalla bocca. Il nastro corre dritto dentro la cassa e poi, se lo si tira in su o in giù, segue la curva di una mensola caricata in punta, y = dy·(3t² − t³)/2, presa in 25 punti con la loro pendenza. La striscia è il poligono dei due bordi spostati lungo le normali; l’incavo è fatto di tratti lungo linee parallele, non di un gradiente, così la luce segue la piega. La stampa si misura dalla punta: a u pixel dal gancio il nastro dice MIN + u/k, e ogni tacca e ogni numero si posa sulla curva alla sua distanza, girato con lei. Per non cambiare la misura piegando, la punta sta a x = ℓ − 0,6·dy²/ℓ.
Fuori ci sono due o tre pixel per centimetro: troppo pochi per i millimetri. La finestrella sulla cassa mostra la stessa lettura della bocca ingrandita a 30 unità per centimetro, con le tacche dei millimetri, dei mezzi centimetri e dei centimetri, i numeri accanto alla loro tacca perché il filo rosso non li tagli e le decine in rosso. Quando il nastro corre, un feGaussianBlur solo orizzontale, grande quanto la velocità, sfoca la stampa fuori e dentro la finestrella.
Il gancio sta sui rivetti in due asole: tirato dalla mano va avanti di PLAY pixel, spinto torna indietro, e quando la cassa si muove resta indietro per l’inerzia; ai capi dell’asola rimbalza. Ruota un poco sui rivetti con una molla angolare (SWING) spinta dall’accelerazione del nastro. La piega è una molla smorzata (BEND): mentre si trascina segue il dito, limitata a pochi pixel su un nastro corto, e lasciata oscilla fino a tornare dritta.
Col blocco spento, al rilascio la molla dentro la cassa tira il nastro con una forza costante (PULL): accelera finché il gancio sbatte contro la bocca, rimbalza con BOUNCE della sua velocità, viene spinto indietro sui rivetti e la cassa sobbalza e dondola su due molle. I bottoni e i tasti portano il nastro alla misura con le molle GLIDE e KEYS, il rilascio col blocco acceso con SNAP sul centimetro intero. Tutto va a passi sul ticker di GSAP, col passo limitato a 1/30 di secondo, e quando niente si muove non si ridisegna.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
MIN | script.js | 80 | La lunghezza più corta, in centimetri: il gancio contro la bocca. |
MAX | script.js | 240 | La lunghezza più lunga: il gancio in fondo al disegno. Decide anche la scala, e quindi quanto è alto il tavolo. |
START | script.js | 160 | La lunghezza all’apertura della pagina. |
STEP | script.js | 1 | Di quanti centimetri sposta il nastro una freccia. |
BIG_STEP | script.js | 10 | Di quanti centimetri lo spostano Maiuscolo con una freccia e i tasti Pagina. |
GLIDE | script.js | [72, 8.6] | La molla dei bottoni Seats: rigidità e smorzamento (meno smorzamento, più oltre e ritorno). |
KEYS | script.js | [420, 36] | La molla più svelta dei tasti: rigidità e smorzamento. |
SNAP | script.js | [900, 54] | La piccola molla che porta il nastro sul centimetro intero al rilascio. |
PULL | script.js | 4200 | Quanto forte la molla della cassa tira dentro il nastro col blocco spento, in pixel al secondo quadrato. |
BOUNCE | script.js | 0.14 | Quanta velocità tiene il gancio quando rimbalza sulla bocca. |
BEND | script.js | [250, 6.5] | La molla dell’acciaio piegato e lasciato: rigidità e smorzamento. |
PLAY | script.js | 1.6 | Quanto scivola il gancio sui rivetti, in pixel. |
SWING | script.js | [380, 14] | La piccola oscillazione del gancio sui rivetti: rigidità e smorzamento. |
SAY_ON | script.js | Stays where you leave it | La riga sotto Lock quando il blocco è acceso. |
SAY_OFF | script.js | Springs back when let go | La riga sotto Lock quando il blocco è spento. |
data-preset | index.html | 120, 180, 230 | La lunghezza che dà ogni bottone, in centimetri; la scritta sotto il nome la scrive lo script. |
Per la lunghezza di un tavolo, di una scrivania o di una libreria in un configuratore di mobili, la larghezza di una tenda o di un tappeto, il taglio di una stoffa o di un cavo: ovunque il valore è una misura in centimetri e conviene vedere la cosa che cambia.
Il disegno prende la larghezza dello schermo meno un margine: la scala dei centimetri si stringe perché tutta la corsa ci stia, il tavolo con lei, e la cassa resta della stessa misura. Sul nastro restano le tacche ogni 5 e ogni 10 centimetri e un numero ogni 20; i millimetri restano nella finestrella. Il dito trascina il gancio senza far scorrere la pagina solo sopra il gancio (touch-action: none); il pulsante Lock e i tre bottoni vanno su due righe.
Niente piega, niente oscillazioni né scivolate del gancio, niente sfocatura né sobbalzo della cassa: senza blocco, al rilascio il nastro rientra in un terzo di secondo con un rallentato semplice; i bottoni e i tasti lo portano alla misura in 0,28 secondi e all’apertura è già alla sua lunghezza. L’anteprima, invece di tirare il gancio, passa da un bottone all’altro.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 18 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.