
L’inchiostro che scopre
WebGL, Hover
Gratis
Animazione WebGL nello stile minimal: una parola grande fatta di qualche migliaio di puntini d’inchiostro su un bianco caldo. Arrivano da una nuvola sparsa e si posano sulla parola; il puntatore li soffia via e loro tornano al loro posto su una molla, e quelli portati più lontano si accendono per un attimo di vermiglio.
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>Flock</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>
<!-- a word made of a few thousand specks of ink, drawn by WebGL in one draw call: they fly in from a loose cloud
and settle on the word; the pointer blows them aside like a breath, and they spring back to their place -->
<main class="pagina" data-pagina>
<canvas class="tela" aria-hidden="true" data-tela></canvas>
<header class="testa">
<p class="marchio" data-entra>Flock</p>
<p class="testa__nota" data-entra>A motion studio</p>
</header>
<h1 class="parola" data-parola>Flock</h1>
<p class="nota" data-entra data-nota>Move through the word, click to scatter</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.
17 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 parola di particelle» da Animorio e adattala al mio sitoLa parola si scrive in un canvas grande quanto la pagina, mai mostrato, con il corpo che la fa stare nell’80% della larghezza (88% sul telefono) e nel 42% dell’altezza. getImageData dà i pixel pieni: contandoli si trova il passo di una griglia che dà circa COUNT puntini su ogni schermo, e ogni punto della griglia, spostato un poco a caso, diventa un puntino se cade su un pixel pieno. Il caso ha un seme fisso, così la grana è sempre la stessa.
Ogni puntino ha la sua casa, la sua posizione e la sua velocità in Float32Array. A ogni fotogramma, in sottopassi di 1/120 di secondo, una molla lo tira verso casa (SPRING) e lo frena (DAMPING); il puntatore lo spinge via con una forza che cala col quadrato della distanza dentro un raggio che si allarga con la velocità del puntatore. Prima di partire, i puntini della nuvola galleggiano appena.
Ogni puntino ha un ritardo fra 0 e 1, fatto per due terzi dalla sua posizione orizzontale e per un terzo dal caso; un solo numero, animato da GSAP da 0 a 2 in due volte ARRIVAL, dice chi è già partito. Il soffio si accende solo quando il numero passa 1,4, cioè a parola composta.
Tutti i puntini sono un unico buffer di tre numeri ciascuno (x, y e quanto è caldo) disegnato con gl.POINTS: il vertex shader passa da pixel a coordinate dello schermo e il fragment shader ritaglia un tondo e mescola l’inchiostro con l’accento secondo il caldo. Il caldo sale con la distanza da casa e scende in modo esponenziale. Senza WebGL gli stessi puntini si disegnano in un canvas 2D in due passate.
Una timeline GSAP con repeat -1 porta un numero da 0 a 1 in dieci secondi: è la posizione su un otto disegnato sopra la parola, che fa da puntatore quando quello vero è fermo da più di 2,4 secondi. Un clic, un tocco, Invio o lo spazio danno a ogni puntino una spinta in una direzione a caso. Al resize la parola si ricampiona e i puntini tengono la posizione di prima, così tornano a casa con la molla. Con il movimento ridotto la parola è già composta e ferma.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
WORD | script.js | 'Flock' | La parola fatta di puntini: corta, sta in una riga. |
COUNT | script.js | 6000 | Quanti puntini, più o meno (sul telefono poco più della metà). |
DOT | script.js | 2 | Il diametro di un puntino, in px. |
WEIGHT | script.js | 820 | Il peso della parola: Archivo va da 100 a 900, più pieno vuol dire più puntini nelle aste. |
PUSH | script.js | 1 | Quanto soffia il puntatore (0 non soffia). |
REACH | script.js | 110 | Fin dove arriva il soffio, in px: si allarga se il puntatore corre. |
SPRING | script.js | 60 | Quanto è rigida la molla che riporta i puntini al loro posto. |
DAMPING | script.js | 9 | Quanto è frenata la molla: più bassa, più overshoot e oscillazioni. |
ARRIVAL | script.js | 2.4 | In quanti secondi la nuvola si posa sulla parola. |
Come apertura di uno studio di animazione, di un’agenzia creativa o di un prodotto che parla di dati, di reti o di folle; come titolo di una conferenza o di un festival; ovunque una parola sola deve sembrare viva e reagire alla mano.
Uguale col dito: trascinando si soffia, toccando si sparpaglia. La parola sta nell’88% della larghezza, i puntini sono poco più della metà e il soffio è un po’ più stretto.
La parola è già composta e ferma, compare in dissolvenza; il puntatore e il clic non spostano niente.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 7,3 KB; le librerie: GSAP 28 KB.
Provata il 21 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.