
Il rullo delle ore
Selettori, 3D, Fisica
NuovaGratis
Il rapporto di un compressore audio regolato su una molla d’acciaio: la manopola è un anello anodizzato fissato a metà della molla, e spostandolo le spire si stringono da una parte e si aprono dall’altra. Trascinato veloce manda onde di compressione lungo l’elica; lanciato, l’anello prosegue un poco e la molla lo riporta.
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 coil spring slider</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/inter-tight@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the ratio of a studio compressor, set on a steel coil spring: the knob is an anodized collar fixed to the
middle turn of the spring, and the spring runs from it to two end caps. Moving the collar squeezes the turns on
one side and opens them on the other. The spring, the rod inside it, the collar and the caps are drawn by the
script on the canvas; the grip only carries the keyboard's ring -->
<div class="ratio" data-ratio>
<div class="ratio__head">
<span class="ratio__label" id="ratio-label">
<svg class="ratio__icon" viewBox="0 0 24 24" aria-hidden="true">
<path class="ratio__axes" d="M3.5 3.5v17h17"/>
<path class="ratio__unity" d="M3.5 20.5L20.5 3.5"/>
<path class="ratio__curve" data-curve d="M3.5 20.5L10 14L20.5 11"/>
</svg>
Ratio
</span>
<span class="ratio__value" aria-hidden="true"><span class="ratio__number" data-number>4.0</span><span class="ratio__unit">:1</span></span>
</div>
<div class="ratio__track" role="slider" tabindex="0" aria-labelledby="ratio-label" aria-orientation="horizontal" aria-valuemin="1" aria-valuemax="20" aria-valuenow="4.0" aria-valuetext="4.0 to 1" data-track data-autoclic>
<canvas class="ratio__coil" aria-hidden="true" data-canvas></canvas>
<span class="ratio__grip" aria-hidden="true" data-grip></span>
</div>
<!-- the two ends of the range, right under the collar's two last stops: the script writes them from RANGE -->
<div class="ratio__scale" aria-hidden="true" data-scale>
<span data-low></span>
<span data-high></span>
</div>
</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.
29 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 a molla» da Animorio e adattala al mio sitoOgni mezzo giro di filo ha la sua posizione lungo l’asse; fra uno e l’altro una curva morbida dà la posizione di ogni punto del filo, e il punto gira intorno all’asse: altezza R·cos θ, profondità R·sin θ. Lo spostamento di lato per la profondità (YAW) fa vedere la molla un po’ di fianco, e un poco di prospettiva fa la metà vicina di ogni spira appena più grande di quella lontana. A ogni fotogramma la molla si ridisegna su un canvas, in un’immagine fuori schermo che poi si posa due volte: dritta, e capovolta e sfumata per il riflesso.
L’ordine fa la profondità: il tappo destro, poi la molla di destra (le metà lontane, scure e sottili, poi l’asta, poi le metà vicine), l’anello, la molla di sinistra e per ultimo il tappo sinistro. Le metà vicine hanno un bordo nero che taglia le lontane e l’asta, un colore che va dalla luce in alto allo scuro e a un riflesso freddo in basso, e una riga di luce sul lato che guarda la lampada: più la spira sta dritta più brilla, così le spire strette lampeggiano quando passa un’onda.
La molla è una catena di pesetti, uno per mezzo giro, legati da molle (COIL): calcolata a passi di 1/600 di secondo al massimo, con un freno sulla velocità di ognuno e uno più forte sulle differenze fra vicini, che spegne le increspature fitte. Quando la mano porta l’anello veloce le spire vicine restano indietro: si stringono davanti, si aprono dietro, e l’onda corre fino al tappo e torna.
Tenuto, l’anello va dove va la mano; premuto lontano, la raggiunge su una molla rapida. Lasciato, tiene la velocità della mano degli ultimi 90 millisecondi per FLING, e una molla (COLLAR) lo riporta al suo valore: della molla sente solo le onde, non il carico fisso, altrimenti la parte stirata lo tirerebbe via dal valore. Quando tutto è lento e vicino al suo posto l’attrito della filettatura lo ferma, e il ciclo smette di disegnare.
Due spire non possono passare una nell’altra: dopo ogni passo, dove due mezzi giri sono più vicini di mezzo filo vengono separati, in andata e in ritorno, e si muovono insieme. Oltre la fine della corsa l’anello cede sempre meno, finché la sua parte è acciaio pieno e si ferma secco. Frecce, Maiuscolo e i tasti Pagina spostano il rapporto, Inizio e Fine vanno ai capi; la scala è logaritmica come sui compressori (LOG_SCALE).
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
START_AT | script.js | 4 | Il rapporto all’apertura della pagina. |
RANGE | script.js | [1, 20] | Il rapporto più basso e il più alto. |
STEP | script.js | 0.1 | Di quanto si muove il rapporto alla volta. |
KEYS | script.js | [0.1, 1] | Di quanto sposta il rapporto una freccia, e con Maiuscolo o coi tasti Pagina. |
LOG_SCALE | script.js | true | Il rapporto cresce più in fretta verso destra, come sui compressori; spento, la scala è uniforme. |
TURNS | script.js | 16 | Le spire della molla, metà per parte dell’anello. |
COIL | script.js | [9000, 0.24] | Le molle del filo: quanto sono rigide (più lo sono, più corrono veloci le onde) e quanto sono frenate. |
COLLAR | script.js | [6, 3000, 0.16] | L’anello: quanto pesa, quanto forte lo riporta il suo valore e quanto è frenato. |
FLING | script.js | 0.9 | Quanta velocità della mano tiene l’anello quando lo si lascia. |
Per il rapporto o la soglia di un compressore, la rigidità delle sospensioni nell’app di una bici, la tensione di una cinghia, la durezza di un materasso regolabile: ovunque un valore vuol dire quanto qualcosa spinge indietro.
Il cursore prende la larghezza dello schermo meno un margine; la molla tiene tutte le sue spire, si accorcia solo la corsa. Sulla striscia della molla il dito trascina l’anello senza far scorrere la pagina (touch-action: none), che scorre normalmente fuori da lì. Premendo in un punto qualsiasi l’anello corre lì, e sotto il dito prende luce come col mouse.
Niente avvolgimento all’apertura, niente onde e niente slancio: la molla prende subito la forma giusta per dove sta l’anello, che segue il dito e salta al valore scelto coi tasti. Il numero è già al suo valore; la luce sull’anello cambia senza movimento.
GSAP 3.15.0, Inter Tight (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 12 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.