
Il caricamento che diventa marchio
Transizioni, SVG, Testo
NuovaGratis
Un cambio di pagina nello stile minimal: al clic ogni riga della pagina, l’etichetta, il titolo, il testo e il link, si rimpicciolisce e si stringe in una sola colonna di caratteri piccoli in mezzo allo schermo, come il nastro di una telescrivente. Il nastro scorre in su davanti a una testina sottile color vermiglio, porta via le righe vecchie e porta su quelle della pagina nuova, che si aprono al loro posto prendendo larghezza e peso con una molla, una dopo l’altra.
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 ticker-tape transition</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>
<header class="bar">
<span class="brand">Wire</span>
<nav class="nav" aria-label="Pages">
<button type="button" data-go="notes" aria-current="page">Notes</button>
<button type="button" data-go="rooms">Rooms</button>
<button type="button" data-go="about">About</button>
</nav>
</header>
<!-- three pages of a made-up sound archive; on a change every line of the page runs into one narrow tape,
the tape scrolls past a thin head and the lines of the new page open out into their places -->
<section class="page" data-page="notes" aria-label="Notes">
<p class="ln ln--kicker" data-role="kicker">Field notes</p>
<h1 class="ln ln--title" data-role="title">Listen.</h1>
<p class="ln ln--body" data-role="body">Notes from a studio that</p>
<p class="ln ln--body" data-role="body">records the quiet parts</p>
<p class="ln ln--body" data-role="body">of cities at night.</p>
<a class="ln ln--go" data-role="go" href="#rooms" data-next="rooms" data-autoclic>Hear the rooms<svg viewBox="0 0 16 12" aria-hidden="true"><path d="M1 6h13M9 1.5 14 6l-5 4.5"/></svg></a>
</section>
<section class="page" data-page="rooms" aria-label="Rooms">
<p class="ln ln--kicker" data-role="kicker">Recordings</p>
<h2 class="ln ln--title" data-role="title">Rooms.</h2>
<p class="ln ln--body" data-role="body">Twelve rooms, one microphone,</p>
<p class="ln ln--body" data-role="body">the hum of every ceiling</p>
<p class="ln ln--body" data-role="body">kept exactly as it was.</p>
<a class="ln ln--go" data-role="go" href="#about" data-next="about" data-autoclic>Who we are<svg viewBox="0 0 16 12" aria-hidden="true"><path d="M1 6h13M9 1.5 14 6l-5 4.5"/></svg></a>
</section>
<section class="page" data-page="about" aria-label="About">
<p class="ln ln--kicker" data-role="kicker">About</p>
<h2 class="ln ln--title" data-role="title">Wire.</h2>
<p class="ln ln--body" data-role="body">A small sound archive</p>
<p class="ln ln--body" data-role="body">kept by two people</p>
<p class="ln ln--body" data-role="body">and one long cable.</p>
<a class="ln ln--go" data-role="go" href="#notes" data-next="notes" data-autoclic>Back to the notes<svg viewBox="0 0 16 12" aria-hidden="true"><path d="M1 6h13M9 1.5 14 6l-5 4.5"/></svg></a>
</section>
<!-- the head the tape runs past: a short hairline with a tick at each end -->
<div class="head" data-head aria-hidden="true"><span class="head__tick"></span><span class="head__tick"></span></div>
<footer class="foot">
<span>Wire sound archive</span>
<span>Listening room open on weekdays</span>
</footer>
</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.
37 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 nastro di testo» da Animorio e adattala al mio sitoOgni riga della pagina (etichetta, titolo, testo, link) è un blocco su una riga sola (white-space: nowrap), mosso solo con le trasformazioni x, y e scale, con l’origine in alto a sinistra. La sua larghezza e il suo peso stanno nelle variabili --w e --g, legate nel CSS a font-stretch e font-weight con clamp, così GSAP le anima come numeri e la molla non porta mai il carattere fuori dagli assi di Archivo (62-125, 100-900).
Il nastro è una colonna in mezzo allo schermo con le righe a TAPE_SIZE per 1,9 pixel di distanza, la riga zero sulla testina. Per mandare una riga sul nastro si misura dove sta a riposo (getBoundingClientRect con la trasformazione tolta un attimo) e si calcolano lo spostamento fino al suo posto sul nastro e la scala, TAPE_SIZE diviso la sua misura del carattere. Le righe vecchie si mettono intorno alla testina, quelle nuove subito dopo, con due righe e mezza di spazio, già piccole e invisibili.
Lo scorrimento è un tween di un solo numero, da zero a quanto serve per portare il centro delle righe nuove sulla testina, con power2.inOut; a ogni aggiornamento ogni riga si rimette a y dalla stessa formula. La trasparenza dipende dalla distanza dalla testina (sbiadisce sopra e sotto) e la riga che passa sulla testina diventa vermiglia. Tutto si calcola da quel numero, quindi il banco di montaggio può fermare e riavvolgere lo scorrimento.
Finito lo scorrimento, ogni riga nuova torna a x 0, y 0 e scala 1 con elastic.out(1, SPRING), e larghezza e peso tornano ai suoi con back.out, sfalsate di STAGGER: prima il titolo, poi le altre dall’alto in basso. Alla fine le trasformazioni e le variabili si tolgono dalle righe, così la pagina resta com’è nel CSS e un resize non trova niente di scritto a mano.
Un clic durante il cambio aspetta in coda; un resize porta subito il cambio alla fine. Da solo il sito gira le tre pagine con una gsap.delayedCall di HOLD secondi. Sul telefono le misure scendono (il titolo con min di vw e vh) e il nastro resta in mezzo. Col movimento ridotto la pagina nuova compare in dissolvenza sopra la vecchia, senza nastro.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
TAPE_SIZE | script.js | 15 | La misura in pixel dei caratteri sul nastro. |
TAPE_WIDTH | script.js | 62 | La larghezza dei caratteri sul nastro, da 62 a 125 (la pagina torna alla sua). |
GATHER_TIME | script.js | 0.6 | I secondi che le righe vecchie impiegano a entrare nel nastro. |
SCROLL_TIME | script.js | 0.95 | I secondi dello scorrimento del nastro davanti alla testina. |
OPEN_TIME | script.js | 1.1 | I secondi che le righe nuove impiegano ad aprirsi al loro posto. |
STAGGER | script.js | 0.05 | I secondi fra una riga e la successiva. |
SPRING | script.js | 0.5 | La molla dell’apertura: più basso oscilla di più, 1 quasi non oscilla. |
HOLD | script.js | 2.6 | I secondi che ogni pagina resta prima che arrivi da sola la successiva. |
Per passare da una pagina all’altra in un sito sobrio fatto di parole: un archivio, una rivista, un giornale, uno studio di suono o di grafica, un portfolio. Il nastro dice che la pagina nuova è fatta delle stesse righe di quella vecchia, solo rimesse in fila.
La stessa transizione con le misure adattate: il titolo si misura sulla larghezza e sull’altezza dello schermo, il nastro resta in mezzo e la testina si accorcia. Un tocco sul link o sul menu cambia pagina.
Niente si sposta: la pagina nuova compare in dissolvenza sopra la vecchia, con le righe già al loro posto, e non c’è nastro.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 5,9 KB; le librerie: GSAP 28 KB.
Provata il 22 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.