
Il pavimento che si alza
SVG, Hover, Fisica
NuovaGratis
Un tavolo da biliardo visto dall’alto: la stecca prende la mira col puntatore, si tira indietro e spacca il triangolo con la fisica vera. Le palle rotolano davvero, quelle in buca girano in un piccolo vortice e finiscono nel vassoio, poi il triangolo rimette tutto a posto.
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 billiard break</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/standard.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/mona-sans@5.3.0/standard.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="sala">
<header class="testa">
<p class="sopra">The Baize Room Billiard Club</p>
<h1 class="titolo">Break the rack</h1>
<p class="riga">Aim with the pointer: the farther away it is, the harder the cue hits. Click the table to shoot.</p>
</header>
<!-- the table is drawn by the script: felt, rails, pockets, fifteen numbered balls and the cue -->
<div class="tavolo" data-tavolo>
<svg class="tavolo__svg" data-svg role="img" aria-label="A billiard table seen from above, with fifteen balls racked in a triangle"></svg>
</div>
<div class="piede">
<div class="conti">
<p class="conto"><span class="conto__nome">Potted</span> <span class="conto__num" data-imbucate>0</span><span class="conto__su">/15</span></p>
<p class="conto"><span class="conto__nome">Breaks</span> <span class="conto__num" data-colpi>0</span></p>
<p class="stato" aria-live="polite"><span class="stato__testo" data-stato>Table is set</span></p>
</div>
<!-- the ball return: potted balls roll in here -->
<div class="vassoio" data-vassoio aria-label="Ball return"></div>
<button type="button" class="tiro" data-tiro data-autoclic>
<span class="tiro__fondo" aria-hidden="true"></span>
<span class="tiro__testo">Break</span>
</button>
</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.
41 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 spaccata al biliardo» da Animorio e adattala al mio sitoNiente librerie: per palle tutte uguali bastano poche righe. A ogni passo il panno toglie velocità (un attrito costante più uno che cresce con la velocità), poi si controllano le coppie di palle che si toccano: si separano e si scambiano l’impulso lungo la linea dei centri, con un coefficiente di elasticità. I passi sono tanti quanti servono perché nessuna palla avanzi più di un terzo del raggio: così alla spaccata nessuna attraversa le altre.
Ogni sponda è un segmento, e alle buche continua con due segmenti inclinati, le ganasce. Per ogni palla si cerca il punto più vicino di ogni segmento: se è più vicino del raggio la palla viene spinta fuori e la sua velocità rimbalza lungo la normale. Così la stessa regola fa i rimbalzi sulle sponde e le palle che sbattono sullo spigolo della buca e restano fuori.
Ogni palla tiene due vettori in 3D: il polo del numero e l’asse della fascia. Quando avanza di d, ruotano di d diviso il raggio attorno all’asse orizzontale perpendicolare al moto. Numero e fasce sono calotte della sfera viste dall’alto: si campiona il loro bordo e i punti dietro la palla si spingono sul contorno, così ogni fotogramma diventa un tracciato SVG.
La stecca è disegnata una volta sola con la punta in zero e si muove con un solo transform: posizione della bianca, angolo di mira e distanza. L’angolo insegue il puntatore con una frenata esponenziale, e la distanza dice la forza. Il colpo è una timeline GSAP: carica, pausa, colpo secco, e solo alla fine del colpo la bianca riceve la sua velocità.
Una palla in buca esce dalla fisica e una timeline GSAP la fa girare a spirale verso il centro della buca, nel verso in cui correva, mentre rimpicciolisce e rotola. Quando tutto è fermo, una delayedCall aspetta la pausa e poi il triangolo rimette le palle: anche lì ogni palla rotola mentre torna al suo posto.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
POTENZA | script.js | 3400 | La velocità della bianca col colpo più forte, in unità del tavolo al secondo (il tavolo è lungo 1000). |
ATTRITO | script.js | 270 | Quanto il panno frena le palle: più alto, la spaccata finisce prima. |
SPONDA | script.js | 0.78 | Quanto rimbalzano le palle sulle sponde (1 = senza perdere niente). |
URTO | script.js | 0.95 | Quanto sono elastici gli urti fra le palle. |
EFFETTO | script.js | 0.3 | L’effetto sulla bianca: positivo continua in avanti dopo l’urto, negativo torna indietro. |
PAUSA | script.js | 0.9 | Secondi di attesa, a palle ferme, prima che il triangolo rimetta a posto. |
GUIDA | script.js | true | La linea di mira con la palla fantasma. |
Per la pagina di un locale, di un club o di un gioco, per una pagina 404 da giocare o per un momento di svago dentro un sito: è un gioco, e va lasciato in un punto dove chi arriva ha tempo.
Il tavolo si gira in verticale, così resta grande. Senza hover, il tocco fa tutto insieme: mira verso il dito e tira, con la forza data dalla distanza. Il pulsante tira lungo la mira di partenza.
Niente movimento: la spaccata si calcola tutta in un colpo, le palle si dissolvono e ricompaiono dove si sono fermate; anche il triangolo rimette a posto con una dissolvenza.
GSAP 3.15.0, Fraunces (font variabile) 5.3.0, Mona Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 15 KB; le librerie: GSAP 28 KB.
Provata il 11 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.