
Il titolo che si alza dalla linea
Transizioni, Testo, Immagini
NuovaGratis
Nello stile minimal: una foto di un lago al tramonto tagliata in tasselli. Una riga rossa sottile la attraversa e ogni colonna che tocca mette in ordine i suoi tasselli per luce, i chiari in alto e gli scuri in basso: la foto diventa un campo di sfumature, una per colonna, poi la riga ripassa e ogni tassello torna a casa.
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 photo sorted by light</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/instrument-sans@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage" data-stage>
<p class="mark" data-mark>Lowlight</p>
<!-- the plate: the photo cut into small chips, column by column; a red hairline passes over it and every column
it touches sorts its chips by light, then puts them back -->
<figure class="plate" data-plate role="img">
<canvas class="chips" data-chips aria-hidden="true"></canvas>
<i class="head" data-head aria-hidden="true"></i>
<figcaption class="cap" aria-hidden="true">
<span class="cap__title" data-title></span>
<span class="cap__state">
<span class="cap__word" data-word="shot">As shot</span>
<span class="cap__word" data-word="light">By light</span>
</span>
</figcaption>
</figure>
</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.
16 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 foto ordinata per luce» da Animorio e adattala al mio sitoLa foto sta su una canvas nascosta (disegnata dallo script o caricata da IMAGE). Lo script la taglia in COLUMNS colonne e in tante righe quante ne servono perché i tasselli siano quasi quadrati, e con getImageData calcola per ogni tassello il colore medio e la luce (0,2126 R + 0,7152 G + 0,0722 B).
Ogni colonna ordina i suoi tasselli per luce, dal più chiaro al più scuro (LIGHT_ON_TOP), e il posto di un tassello in quell’ordine è dove andrà. Si ordinano solo le colonne, non tutta la foto: i tasselli si muovono soltanto in su e in giù, e la foto ordinata resta un campo di sfumature verticali che ricorda ancora il suo cielo.
Ogni colonna ha un numero, p, che una timeline GSAP porta da 0 a 1 quando la riga rossa ci passa sopra. Dentro la colonna ogni tassello parte un poco dopo quello sopra (SPREAD), corre al suo posto con una curva power3.out, poi va OVERSHOOT pixel oltre e torna con un mezzo seno. Nel primo terzo della corsa il dettaglio sfuma nel colore medio e il tassello si stringe di GAP pixel, così fra i tasselli resta un filo di carta.
Più di novecento tasselli non sono elementi della pagina: il ticker di GSAP ridisegna la canvas solo quando qualcosa si è mosso. Una colonna a casa si disegna in un pezzo solo, senza giunture; i bordi dei tasselli cadono su pixel interi, così non restano righe sottili fra uno e l’altro.
La riga rossa è un elemento di un pixel che la timeline porta da sinistra a destra in SWEEP secondi; ogni colonna parte quando la riga arriva sul suo centro. Le due parole sotto la foto hanno il peso e la larghezza in due variabili CSS lette da font-variation-settings: la parola dello stato nuovo prende peso con elastic.out, l’altra torna sottile e grigia.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
IMAGE | script.js | '' | La foto: un indirizzo, o un file caricato nel Playground. Vuoto, la foto la disegna lo script. Una foto da un altro sito che non si può leggere lascia il posto a quella disegnata. |
CAPTION | script.js | 'Lake at dusk' | La didascalia sotto la foto. |
COLUMNS | script.js | 28 | In quante colonne di tasselli è tagliata la foto; le righe seguono la forma della foto. |
LIGHT_ON_TOP | script.js | true | I tasselli chiari salgono in cima; con false scendono in fondo e la foto ordinata si capovolge. |
SWEEP | script.js | 2.4 | I secondi che la riga rossa impiega ad attraversare la foto. |
GAP | script.js | 1 | I pixel di carta fra i tasselli quando sono in ordine (0 = nessuno). |
OVERSHOOT | script.js | 1 | Di quanti pixel ogni tassello va oltre il suo posto prima di tornare. |
HOLD | script.js | 2.2 | Quanti secondi la foto resta ferma, intera o in ordine, prima che la riga ripassi. |
LOOP | script.js | true | Se la foto si ordina e torna di continuo. Con false lo fa una volta e poi aspetta un clic. |
Per mostrare una foto come un oggetto da guardare due volte: l’apertura del portfolio di un fotografo o di un colorista, la pagina di una stampa in vendita, la copertina di un reportage, un’app che lavora sulle foto. Funziona con qualunque foto, anche caricata nel Playground.
La stessa animazione con le misure adattate: la foto è larga quasi quanto lo schermo e le colonne sono più strette. Un tocco sulla foto fa passare la riga subito.
Niente si muove: la foto compare in dissolvenza e resta. Un clic passa dalla foto al campo di sfumature (e ritorno) con una dissolvenza, senza tasselli che corrono.
GSAP 3.15.0, Instrument Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 8,2 KB; le librerie: GSAP 28 KB.
Provata il 19 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.