
Parole che si fondono
Testo, Scroll, SVG
NuovaGratis
Un metronomo disegnato con linee sottili, nello stile minimal: l’asta oscilla come un pendolo vero e a ogni battito una sillaba cade sulla riga e prende peso. L’ultima sillaba della battuta è l’accento, nel colore vermiglio. Il peso sull’asta si trascina: più in alto è più lento, più in basso più veloce, e il numero dei BPM cambia larghezza e peso insieme al tempo.
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>Metronome</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" data-stage aria-label="A metronome. On every beat a syllable falls onto the line; the last one of the bar is accented.">
<!-- the hairlines: the line the syllables land on and the metronome, drawn by the script -->
<svg class="scene" data-scene aria-hidden="true">
<path class="rule" data-rule d="" />
<g data-ticks></g>
<g data-metro>
<path class="floor" data-floor d="" />
<g data-swing>
<path class="arc" data-arc d="" />
<path class="mark" data-mark-l d="" />
<path class="mark" data-mark-r d="" />
<path class="flash" data-flash-l d="" />
<path class="flash" data-flash-r d="" />
</g>
<path class="body" data-body d="" />
<path class="scale" data-scale d="" />
<g data-rod>
<path class="rod" data-rod-line d="" />
<path class="weight" data-weight d="" />
</g>
<path class="pivot" data-pivot d="" />
</g>
</svg>
<!-- the syllables, one span each, built by the script -->
<div class="words" data-words aria-hidden="true"></div>
<span class="probe" data-probe aria-hidden="true"></span>
<!-- the handle on the metronome: drag it up and down, or use the arrow keys -->
<div class="grip" data-grip role="slider" tabindex="0" aria-label="Tempo" aria-valuemin="40" aria-valuemax="208" aria-valuenow="72" aria-valuetext="72 beats per minute"></div>
<p class="tempo" data-tempo aria-hidden="true">
<span class="tempo__num" data-bpm>72</span>
<span class="tempo__meta">
<span class="tempo__unit">BPM</span>
<span class="tempo__window"><span class="tempo__name" data-name>Adagio</span></span>
</span>
</p>
<p class="hint" data-hint aria-hidden="true">Drag the weight to change the tempo</p>
</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.
21 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 metronomo delle sillabe» da Animorio e adattala al mio sitoTutta la regia è una timeline GSAP in pausa dove il tempo non è in secondi ma in battiti: la sillaba numero k della parola cade fra il battito b0 + k − 0,42 e b0 + k, la parola si chiude mezzo battito dopo l’accento, la successiva parte dopo REST battiti. La timeScale della timeline è il tempo diviso 60: a 72 BPM un battito dura 0,83 secondi, a 144 la metà. Cambiando la timeScale GSAP tiene fermo il punto in cui si trova, quindi il tempo può cambiare in qualsiasi momento senza salti.
L’angolo dell’asta è SWING · cos(π · t), con t il tempo della timeline in battiti: ai battiti pari l’asta è tutta a destra, ai dispari tutta a sinistra, ferma un istante agli estremi e veloce al centro, come un pendolo vero. Il colpo scatta quando t passa un numero intero; la tacca dell’arco da quella parte si accende e si spegne. L’asta è una curva che si piega di un pixel verso l’esterno agli estremi, quando l’accelerazione è massima, e di più ai tempi veloci. Perché il giro torni identico, la battuta intera ha sempre un numero pari di battiti.
La posizione del peso sull’asta è un numero u fra 0 (in basso, 208 BPM) e 1 (in alto, 40 BPM), e il tempo è 208 · (40 / 208)^u: una scala logaritmica, come le tacche di un metronomo vero, più fitte ai tempi veloci. Trascinando, lo spostamento verticale del puntatore diventa u; il peso lo insegue con un piccolo ritardo, quindi anche il tempo cambia morbido. Le frecce della tastiera cambiano il tempo di 2 BPM (10 con Maiuscolo).
Ogni sillaba è uno span dentro un altro: quello fuori si sposta e si schiaccia, quello dentro porta gli assi wght e wdth del carattere variabile Archivo. Cade leggera (wght 150) e stretta (wdth fino a 84); sul colpo passa a wdth 118 e a un’altezza di 0,86, poi torna a 100 e 1 con una molla elastica, mentre il peso sale a 560 (860 per l’accento). La larghezza di ogni sillaba si misura già al suo peso finale, e lo span esterno ha quella larghezza con il testo al centro, così il cambio di assi non sposta la parola.
La riga è un path SVG ridisegnato a ogni fotogramma: se nessuna sillaba sta atterrando è una retta, altrimenti un punto ogni 5 pixel e sotto ogni sillaba appena posata una campana di Gauss profonda un paio di pixel, che torna piatta con la stessa molla. Il metronomo è disegnato in unità sue (il corpo è alto 100) con vector-effect: non-scaling-stroke, così le linee restano sottili a ogni misura dello schermo.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
WORDS | script.js | ['ca-den-za', 'syn-co-pa-tion', 'al-le-gro'] | Le parole, una per battuta: i trattini dividono le sillabe, ne cade una a ogni battito e l’ultima è l’accento (fino a 6 parole, 8 sillabe l’una). |
TEMPI | script.js | [72, 104, 144] | Il tempo di ogni parola in battiti al minuto, da 40 a 208: il peso ci scivola da solo prima che la parola cominci (finché nessuno lo trascina). |
SWING | script.js | 26 | Di quanti gradi oscilla l’asta da ogni parte. |
REST | script.js | 4 | Quanti battiti vuoti dopo l’accento prima della parola seguente: in questi la parola si chiude, resta da leggere e se ne va. |
LIGHT | script.js | 150 | Il peso della sillaba mentre cade (da 100 a 900). |
HEAVY | script.js | 560 | Il peso che prende quando atterra (da 100 a 900). |
ACCENT | script.js | 860 | Il peso della sillaba accentata, l’ultima della battuta (da 100 a 900). |
SPRING | script.js | 1 | Quanto è elastico ogni atterraggio: 0.4 si posa secco, 2 ondeggia più a lungo. |
Per un sito che vive di ritmo: una scuola di musica, un festival, un’app per esercitarsi, un podcast, il titolo di una pagina su tempo e misura. Anche come intestazione di una lezione di dizione o di una pagina di parole che si scompongono in sillabe. Il metronomo con il peso trascinabile è anche un controllo vero: si può usare per scegliere un valore.
La stessa animazione con le misure adattate: il metronomo sta in alto al centro sulla sua base, la riga con le sillabe sotto, larga quasi come lo schermo, e il tempo sotto la riga. Il peso si trascina col dito, su e giù sul metronomo.
Niente oscilla e niente cade: l’asta resta dritta e a ogni battito si accende in dissolvenza la tacca da una parte e dall’altra; le sillabe compaiono in dissolvenza già al loro posto nella parola e già col loro peso, l’accento in vermiglio, e la parola sparisce in dissolvenza. Il peso si trascina lo stesso, e si sposta senza scivolare.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 10 KB; le librerie: GSAP 28 KB.
Provata il 16 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.