
L’indicatore a lancetta
Contatori, Fisica, SVG
NuovaGratis
La ruota dei premi di una trattoria: si lancia col dito o col pulsante e poi fa da sola, rallentando per attrito; ogni piolo che passa fa sbattere la linguetta e le toglie un po' di velocità, e se si ferma su un piolo si assesta dentro una fetta. La fetta vinta esce un poco, le altre impallidiscono e volano striscioline di carta.
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 prize wheel</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fredoka@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the prize wheel: flicked with a finger or sent round by Spin, it slows down on its own, every peg knocks the
flapper, and where it stops the slice comes out and the paper flies -->
<section class="game" aria-labelledby="game-title" data-game data-autoclic>
<h2 class="game__title" id="game-title">Spin for a treat</h2>
<div class="wheel" data-wheel-box>
<svg class="wheel__disc" viewBox="-100 -100 200 200" role="img" aria-label="The prize wheel" data-wheel></svg>
<svg class="wheel__flap" viewBox="-12 -14 24 44" aria-hidden="true" data-flap>
<path d="M-7-8h14v4c0 7-3.5 15-7 26-3.5-11-7-19-7-26z" fill="#d63b2f"/>
<path d="M-3.6-4v7" stroke="rgba(255,255,255,0.5)" stroke-width="2" stroke-linecap="round"/>
<rect x="-11" y="-14" width="22" height="8" rx="3" fill="#3a2a22"/>
</svg>
</div>
<button class="spin" type="button" data-spin><span>Spin</span></button>
<div class="result" aria-live="polite" data-result>
<p class="result__say" data-say>Drag the wheel or press Spin</p>
<p class="result__prize" data-prize></p>
</div>
</section>
</main>
<div class="paper" aria-hidden="true" data-paper></div>
<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.
45 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 ruota dei premi» da Animorio e adattala al mio sitoLa ruota è un SVG con l'origine al centro: le fette sono spicchi di cerchio, i pioli stanno sui confini, le parole leggono dal centro verso fuori sulla metà destra e dal bordo verso dentro sulla metà sinistra, così non sono mai a testa in giù. Sotto le fette c'è un disco pallido: una fetta spenta impallidisce invece di scurirsi.
La ruota ha un angolo e una velocità; ogni secondo perde una frenata fissa più una parte della sua velocità (FRICTION), calcolate sul ticker di GSAP a passi di 4 millisecondi. Il numero del piolo sotto la linguetta è floor((angolo − mezza fetta) / fetta): quando cambia, un piolo è passato (a gran velocità anche più d'uno in un passo).
La linguetta è una molla: ogni piolo le dà una spinta nel verso in cui va la ruota, più forte quanto più la ruota corre, e toglie PEG gradi al secondo alla ruota. Tenuta entro 40 gradi, rimbalza indietro se li tocca. Quando la ruota si ferma con un piolo a meno di 2,5 gradi dalla linguetta, un tween la porta dentro la fetta.
Afferrata, la ruota segue l'angolo del puntatore attorno al centro (atan2), contando i giri senza salti. Lasciata, prende la velocità dell'ultimo decimo di secondo; una mano ferma prima di lasciare non dà velocità, sotto i 300 gradi al secondo il colpo è troppo debole e non vale.
La fetta vinta è quella col centro sotto la linguetta: cresce dal centro (svgOrigin 0 0) con back.out, le altre scendono a 0,35 di opacità e il premio salta fuori con elastic.out. La carta sono CONFETTI striscioline con gravità e attrito d'aria che girano e mostrano la faccia (scaleY col coseno) prima di svanire. Un clic da script (l'anteprima della libreria) è una mano finta che lancia la ruota, quando è ferma da un po'.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
SLICES | script.js | [['Coffee', 'A free coffee', '#e4683f', '#ffffff'], …] | Le fette: la parola sulla ruota, il premio (vuoto: niente premio), il colore e il colore della parola. |
FRICTION | script.js | [45, 0.5] | Come rallenta la ruota: una frenata fissa in gradi al secondo, e una parte della sua velocità ogni secondo. |
PEG | script.js | 6 | I gradi al secondo che ogni piolo toglie alla ruota sbattendo contro la linguetta. |
SPIN | script.js | [900, 1500] | La velocità che dà Spin, a caso fra questi due valori, in gradi al secondo. |
CONFETTI | script.js | 28 | Quante striscioline di carta volano per un premio. |
Per il sito o la cassa di un ristorante, una promozione di un negozio, un evento, una newsletter con un premio, una festa: qualunque estrazione che deve sembrare una ruota vera.
La ruota è larga al massimo 340 pixel e sta nello schermo; il dito la afferra e la fa girare senza far scorrere la pagina (touch-action none sulla ruota), e un colpo veloce la lancia.
Spin porta la ruota subito su una fetta a caso, dentro di lei, e il premio compare senza salti né carta; la mano fa ancora girare la ruota, ma lasciandola si ferma.
GSAP 3.15.0, Fredoka (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 6,8 KB; le librerie: GSAP 28 KB.
Provata il 3 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.