
L’indicatore a lancetta
Contatori, Fisica, SVG
NuovaGratis
La barra in basso di un'app per allenarsi in casa: la voce scelta sta in piedi come un piolo con una corda elastica arancione intorno. Scegliendone un'altra, l'elastico viene tirato fin lì, agganciato al piolo nuovo e lasciato andare da quello vecchio: schiocca, ci si stringe intorno e ondeggia, e le icone sentono lo strappo.
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 rubber band tab bar</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/funnel-sans@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the tab bar of a home workout app. The tab you are on stands up from the bar like a peg, with a rubber band
round it. Choosing another tab, the band is pulled across the bar, hooked round the new peg and let go off
the old one: it snaps over and wobbles. The band is a ring of springs worked out on every frame and drawn
in the canvas over the tabs; the pegs and the icons below feel it -->
<nav class="bar" aria-label="Main" data-bar>
<button class="tab" type="button" data-tab="train" data-autoclic>
<span class="tab__cap" data-cap>
<span class="tab__peg" aria-hidden="true" data-peg></span>
<svg class="tab__icon" viewBox="0 0 24 24" aria-hidden="true">
<g data-part="bell"><path d="M7.7 12C6.5 9.4 7.2 5 12 5s5.5 4.4 4.3 7"/><path d="M8.6 20.6a6.2 6.2 0 1 1 6.8 0z"/></g>
</svg>
</span>
<span class="tab__label">Train</span>
</button>
<button class="tab" type="button" data-tab="timer">
<span class="tab__cap" data-cap>
<span class="tab__peg" aria-hidden="true" data-peg></span>
<svg class="tab__icon" viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 6.5a7 7 0 1 0 0 14a7 7 0 1 0 0-14zM10 3.4h4M12 3.4v3.1M17.6 7.4l1.3-1.3"/>
<path d="M12 13.5V10" data-part="hand"/>
</svg>
</span>
<span class="tab__label">Timer</span>
</button>
<button class="tab" type="button" data-tab="today">
<span class="tab__cap" data-cap>
<span class="tab__peg" aria-hidden="true" data-peg></span>
<svg class="tab__icon" viewBox="0 0 24 24" aria-hidden="true">
<defs><clipPath id="sky"><rect x="0" y="0" width="24" height="16.4"/></clipPath></defs>
<g clip-path="url(#sky)"><g data-part="sun"><path d="M7 17a5 5 0 0 1 10 0"/><path d="M12 7.6V9.4M6.2 10.4l1.25 1.25M17.8 10.4l-1.25 1.25"/></g></g>
<path d="M3.5 17h17M8.5 20.2h7"/>
</svg>
</span>
<span class="tab__label">Today</span>
</button>
<button class="tab" type="button" data-tab="stats" data-autoclic>
<span class="tab__cap" data-cap>
<span class="tab__peg" aria-hidden="true" data-peg></span>
<svg class="tab__icon" viewBox="0 0 24 24" aria-hidden="true">
<path d="M6.5 19.5v-5" data-part="bar"/><path d="M12 19.5v-9" data-part="bar"/><path d="M17.5 19.5v-14" data-part="bar"/>
</svg>
</span>
<span class="tab__label">Stats</span>
</button>
<button class="tab" type="button" data-tab="you" data-autoclic>
<span class="tab__cap" data-cap>
<span class="tab__peg" aria-hidden="true" data-peg></span>
<svg class="tab__icon" viewBox="0 0 24 24" aria-hidden="true">
<path d="M12 4.6a3.6 3.6 0 1 0 0 7.2a3.6 3.6 0 1 0 0-7.2z" data-part="head"/>
<path d="M5 20c.8-3.6 3.6-5.6 7-5.6s6.2 2 7 5.6"/>
</svg>
</span>
<span class="tab__label">You</span>
</button>
<canvas class="bar__band" aria-hidden="true" data-band></canvas>
</nav>
</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.
22 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 «La barra con l'elastico» da Animorio e adattala al mio sitoLa corda è un anello chiuso di 144 punti legati da molle, più una rigidezza a flessione (la differenza quarta delle posizioni) che arrotonda le curve senza staccarla dagli angoli del piolo. Una seconda smorzatura, sulla differenza quarta delle velocità, spegne solo le pieghe strette: dopo lo schiocco la gomma ondeggia ma non si spiegazza. Il conto si fa a passi di mezzo millesimo di secondo, col passo del fotogramma limitato a 1/30 di secondo.
I pioli in piedi sono scatole arrotondate: un punto che ci entra viene rimesso sul bordo e perde la velocità che lo portava dentro. La somma di quelle velocità, divisa per il tempo, è la forza dell'elastico sul piolo: il piolo si sposta e si inclina con lei su una molla sua, al massimo di qualche pixel. La mano è il punto della corda più rivolto verso la voce nuova: una tween di GSAP lo porta oltre la voce, e dentro ogni fotogramma si sposta un poco a ogni passo di calcolo.
Quando il piolo nuovo si alza, i due capi della goccia gli passano quasi sulla linea di mezzo: spinti punto per punto, verrebbero messi di lato e un capo resterebbe attraverso il piolo. Così, finché sale, ogni punto viene spinto solo dalla sua parte: sopra quelli di una metà della corda (dalla mano in avanti), sotto quelli dell'altra. Poi la mano lascia, il piolo vecchio scende e la tensione fa il resto.
Ogni tratto della corda si disegna più sottile e più chiaro quanto più è allungato rispetto al riposo, come la gomma vera. Le righe oblique della calza stanno sui punti della corda, quindi si allargano dove si tende; il fermo di metallo sta sul primo punto e gira con lei. Per costare poco i tratti si raggruppano per colore e spessore: ogni gruppo è un solo tracciato, e a riposo la corda intera sono tre.
Quando nessun punto si muove più, la mano è libera e le molle dei pioli e delle icone sono ferme, il ciclo smette di calcolare e di disegnare finché non succede qualcosa (un clic, il mouse, il dito). Le voci sono button in un nav, quella scelta ha aria-current; le frecce, Inizio e Fine spostano il fuoco, Invio e Spazio scelgono. L'anteprima della libreria clicca Train, Stats e You a turno: hanno data-autoclic.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
START | script.js | 2 | La voce scelta all'apertura della pagina (0 è la prima, 2 quella nel mezzo). |
PULL | script.js | 0.24 | I secondi che ci vuole a tirare l'elastico fino alla voce accanto (un po' di più per una lontana). |
TENSION | script.js | 1 | Quanto tira la gomma: di più, uno schiocco più veloce e secco. |
SNUG | script.js | 0.78 | Quanto è lungo l'elastico a riposo rispetto al piolo che stringe: meno, un elastico più stretto. |
WOBBLE | script.js | 0.55 | Quanto ondeggia l'elastico dopo lo schiocco (0 si ferma subito, 1 molto vivace). |
THICK | script.js | 4.6 | Lo spessore della corda, in pixel. |
PALE | script.js | 0.8 | Quanto impallidisce la gomma dove è tirata forte. |
LEAN | script.js | 1 | Quanto l'elastico si sporge verso la voce sotto il mouse (0 per niente). |
Per la barra di navigazione di un'app pensata per il telefono, con quattro o cinque sezioni, quando cambiare sezione può avere un po' di gioco: un'app per allenarsi, un'app per bambini, uno strumento creativo. Anche ferma, la corda intorno al piolo dice subito dove si è.
La barra è larga al massimo 420 pixel e sul telefono si stringe allo schermo, con 16 pixel di margine per lato (358 su un telefono di 390); resta alta 70 e ogni voce è un bersaglio di 68 per 70 pixel. Col dito giù su una voce l'elastico si sporge verso di lei, come col mouse sopra; dal piolo scelto l'elastico si prende e si trascina col dito.
L'elastico non si tende e non schiocca: sparisce in dissolvenza dal piolo vecchio e ricompare già stretto intorno a quello nuovo, mentre i pioli compaiono e scompaiono in dissolvenza senza alzarsi. Niente entrata, niente mosse delle icone, niente pizzicata né trascinamento.
GSAP 3.15.0, Funnel Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 14 KB; le librerie: GSAP 28 KB.
Provata il 5 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.