
Otturatore a colonne
Transizioni
NuovaGratis
Un cambio di pagina nello stile minimal: dal punto del clic un retino da tipografia, puntini su una griglia girata di 45 gradi, stampa il colore della pagina dopo in un’onda che sfuma dai puntini piccoli a quelli che si toccano. Poi la pagina nuova esce dal colore pieno attraverso dei fori nello stesso retino, e il suo testo compare prima a puntini e poi intero; per ultimo l’inchiostro del titolo si asciuga.
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 halftone transition</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/anybody@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage" data-stage>
<!-- the first page, on paper -->
<section class="page page--a is-on" data-page="a" aria-label="Press">
<header class="bar">
<span class="brand">Raster</span>
<nav class="nav" aria-label="Pages">
<a href="#press" aria-current="page">Press</a>
<a href="#papers" data-go="b">Papers</a>
</nav>
</header>
<div class="main">
<h1 class="big" data-big>Printed matter.</h1>
<div class="below">
<p class="lede">A small offset and riso press. Posters, zines and books, printed one dot at a time.</p>
<a class="go" href="#papers" data-go="b" data-autoclic>
<span class="go__t">See the papers</span>
<svg class="go__arrow" viewBox="0 0 26 12" aria-hidden="true"><path d="M1 6h22M18.5 1.5 23.5 6l-5 4.5"/></svg>
</a>
</div>
</div>
<footer class="foot">
<span>Print studio</span>
<span>Screen 45 degrees, 85 lines</span>
</footer>
</section>
<!-- the second page, in ink -->
<section class="page page--b" data-page="b" aria-label="Papers" aria-hidden="true">
<header class="bar">
<span class="brand">Raster</span>
<nav class="nav" aria-label="Pages">
<a href="#press" data-go="a">Press</a>
<a href="#papers" aria-current="page">Papers</a>
</nav>
</header>
<div class="main">
<h2 class="big" data-big>On paper.</h2>
<ul class="list" aria-label="Papers">
<li class="row"><span>Uncoated</span><span class="row__soft">Warm white</span><span class="row__end">120 g</span></li>
<li class="row"><span>Cotton</span><span class="row__soft">Soft, thick</span><span class="row__end">300 g</span></li>
<li class="row"><span>Newsprint</span><span class="row__soft">Grey, light</span><span class="row__end">52 g</span></li>
</ul>
<a class="go go--back" href="#press" data-go="a" data-autoclic>
<svg class="go__arrow" viewBox="0 0 26 12" aria-hidden="true"><path d="M25 6H3M7.5 1.5 2.5 6l5 4.5"/></svg>
<span class="go__t">Back to the press</span>
</a>
</div>
<footer class="foot">
<span>Print studio</span>
<span>Screen 45 degrees, 85 lines</span>
</footer>
</section>
<!-- the halftone screen: dots that print the next page's colour, then holes that print its text -->
<canvas class="screen" data-screen aria-hidden="true"></canvas>
</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.
35 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 transizione a mezzatinta» da Animorio e adattala al mio sitoI centri dei puntini sono un reticolo quadrato girato di 45 gradi, come il retino di una stampa in bianco e nero: x = (i − j) · s e y = (i + j) · s, con s = CELL / √2, tenendo solo i punti che cadono nello schermo. Si calcolano una volta per misura e stanno in un Float32Array. Il raggio pieno è 0,74 · CELL, appena più della metà della diagonale della cella, così i puntini pieni si toccano e coprono tutto.
Ogni puntino parte quando l’onda lo raggiunge: il suo tempo è la sua distanza dal clic divisa per quella dell’angolo più lontano. Il raggio cresce con power2.inOut in una finestra larga FRONT del tempo totale, quindi in ogni istante il fronte dell’onda mostra tutti i raggi insieme, dal puntino appena nato a quello pieno: la sfumatura di una stampa a mezzatinta.
Nella seconda metà il canvas si riempie del colore pieno e i puntini si disegnano con globalCompositeOperation destination-out: sono fori. Sotto c’è già la pagina nuova, dello stesso colore, quindi dai fori si vede solo il suo testo, a puntini, finché i fori si toccano e il canvas è vuoto. Ogni fotogramma è un solo path con migliaia di archi e un solo fill.
Il titolo è diviso in lettere, inline-block con font-weight e font-stretch legati a due variabili (Anybody va da 50 a 150 di larghezza e da 100 a 900 di peso). Mentre la pagina esce dai fori le lettere partono a peso 900 e larghezza 58 e tornano a 780 e 62 con elastic.out, sfalsate: l’inchiostro che si allarga sotto la pressa e poi si ritira.
Il punto di partenza è tenuto come frazione dello schermo e il retino si ricalcola a ogni ridimensionamento, anche a metà: il canvas prende le misure nuove e l’onda continua dallo stesso punto. Il canvas segue la densità dello schermo fino a 2. Al telefono il retino è più fitto (quattro quinti di CELL). Con il movimento ridotto le pagine si scambiano in dissolvenza.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
CELL | script.js | 14 | I pixel fra due puntini del retino; al telefono quattro quinti. |
COVER | script.js | 0.8 | I secondi che i puntini impiegano a stampare il colore su tutta la pagina. |
PRINT | script.js | 0.9 | I secondi che i fori impiegano a stampare la pagina nuova dal colore. |
FRONT | script.js | 0.4 | Quanto è larga la sfumatura stampata sul fronte dell’onda, come parte del tempo. |
SPEED | script.js | 1 | La velocità di tutto: 2 è il doppio, 0.5 la metà. |
Per passare da una pagina all’altra in un sito che ha a che fare con la stampa: una tipografia, una stamperia risograph, una casa editrice, una rivista, un archivio di manifesti, un fotografo in bianco e nero. Funziona meglio fra una pagina chiara e una scura, perché il retino stampa proprio il colore della pagina che arriva.
La stessa onda con un retino più fitto: dal punto del tocco i puntini coprono lo schermo alto e la pagina nuova esce dai fori, con le stesse curve e gli stessi tempi.
Niente retino: la pagina nuova compare in dissolvenza sopra quella di prima, con il titolo già asciutto.
GSAP 3.15.0, Anybody (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 6,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.