
Nastro che accelera con lo scorrimento
Scroll, Testo, Hover
Gratis
L'orario d'inverno di un piccolo traghetto in cifre tabulari sottili: sotto il puntatore due linee vermiglio si tendono come elastici fino ai bordi, una lungo la riga e una giù per la colonna, l'orario dove si incrociano prende peso e larghezza e le intestazioni del porto e della barca scattano. Stile minimal.
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 ferry timetable</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="top">
<span class="top__name"><span>Larkspit</span></span>
<span class="top__note"><span>Winter timetable, every day</span></span>
</header>
<!-- the timetable: a port on every row, a boat on every column, a departure time in every cell. Under the pointer
two hairlines stretch like rubber bands to the edges, one along the row and one down the column; the time
where they cross takes weight and width, and the two headers snap -->
<div class="board" data-board>
<svg class="cross" data-cross aria-hidden="true">
<path class="cross__line" data-line-row d="" />
<path class="cross__line" data-line-col d="" />
</svg>
<div class="table" role="table" aria-label="Larkspit ferry, winter departures" tabindex="0" data-table></div>
<i class="rule rule--head" data-rule aria-hidden="true"></i>
<i class="rule rule--foot" data-rule aria-hidden="true"></i>
</div>
<footer class="foot">
<span class="hint" data-hint>Point at a sailing</span>
<span class="sr" aria-live="polite" data-say></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.
20 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 «L'orario del traghetto» da Animorio e adattala al mio sitoLa tabella è una griglia CSS con role=table: la prima colonna per i porti, poi una colonna 1fr per ogni barca, le righe con display: contents. Gli orari si calcolano dalla partenza della barca più i minuti del porto. Ogni testo è uno span con tre variabili CSS, --w (font-weight), --s (font-stretch) e --k (quanto nero c'è nel color-mix col grigio): GSAP anima solo quelle, e le cifre di Archivo con tabular-nums non fanno ballare le colonne.
Le due linee sono due path in un SVG che sta dietro la griglia. Ogni testo ha uno sfondo del colore della carta con un po' di margine: la linea passa sotto e sparisce dietro le cifre, e si vede solo fra una casella e l'altra. Niente maschere e niente calcoli: basta l'ordine dei livelli.
Ogni linea è un percorso di due curve cubiche: dal capo sinistro al punto tenuto (all'altezza del puntatore lungo la linea) e da lì al capo destro, con la tangente piatta nel punto tenuto. Il punto tenuto insegue il centro della riga su una molla rigida (GRAB_SPRING), i capi su una più morbida (ENDS_SPRING): cambiando riga la linea si piega e si raddrizza. PULL sposta il punto tenuto verso il puntatore dentro la casella. Le molle si integrano a mano sul ticker di GSAP col passo limitato a 1/30 di secondo.
Un terzo numero, reach, va da 0 a 1 su una molla quasi frenata del tutto (va oltre di un pixel o due): i capi stanno a quella frazione della strada fra il puntatore e i bordi. Quando la croce si spegne, reach torna a 0 su una molla più dura e le linee rientrano nel puntatore. Una croce nuova nasce già sulla sua riga, senza curva.
Cambiando casella, ogni testo che cambia stato riceve un solo tween (quello vecchio si ferma prima, così uno in ritardo non disfa il nuovo): l'incrocio va a WEIGHT[1] e WIDTH[1] con back.out, la riga e la colonna al nero, le altre al grigio con un ritardo che cresce con la distanza. Le quattro vicine fanno una spinta di NUDGE pixel e tornano con elastic.out; il porto e la barca scattano di 5 pixel verso la tabella e tornano su una molla, prendendo peso.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
GRAB_SPRING | script.js | [420, 30] | La molla del punto in cui il puntatore tiene ogni linea: quanto è rigida e quanto è frenata. |
ENDS_SPRING | script.js | [150, 17] | La molla dei due capi di ogni linea, che seguono il punto tenuto un attimo dopo (meno rigida, più curva). |
PULL | script.js | 0.22 | Quanto il puntatore tira la linea fuori dal centro della riga (0 = per niente). |
WEIGHT | script.js | [230, 680] | Il peso degli orari fermi e dell'orario all'incrocio (da 100 a 900). |
WIDTH | script.js | [88, 114] | La larghezza degli orari fermi e dell'orario all'incrocio (da 62 a 125). |
NUDGE | script.js | 2 | Di quanti pixel si scostano le caselle vicine all'incrocio. |
WANDER | script.js | true | La croce cammina da sola quando nessuno punta. |
Per tutte le tabelle a due entrate in cui si cerca un incrocio: orari di traghetti, treni e corriere, il programma di un festival (palchi e ore), le taglie di un negozio, i prezzi di un hotel per stagione e camera. Funziona finché la tabella sta in uno schermo, fino a otto righe e otto colonne; più grande, conviene filtrarla prima.
Le stesse animazioni a misure adattate: le cifre sono più piccole e le righe più alte, così la tabella riempie lo schermo e le caselle si toccano bene col dito. La croce va dove si tocca e segue il dito mentre striscia; quando il dito si alza resta lì, e dopo qualche secondo riprende a camminare da sola. La pagina scorre ancora in verticale.
Niente molle, niente curve e niente scatti: le linee compaiono già tese sulla riga e sulla colonna, l'incrocio, la riga e le intestazioni cambiano peso e colore con una breve dissolvenza, le vicine non si muovono e la croce non cammina da sola. All'apertura tutto compare in dissolvenza già al suo posto.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 9,2 KB; le librerie: GSAP 28 KB.
Provata il 15 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.