
The colour columns
Hover, SVG
NewFree
The header of a made-up natural history museum, in the rich style: in the great hall, under the skylight, the T-rex plinth is empty. Moving the pointer across the hall or tapping it brings the bones flying in from the sides, a group at a time, each snapping onto its neighbour with a click and a puff of dust: the legs, the pelvis, the back, the tail, the ribs, the little arms, the neck, the skull and the jaw. Once whole, the tyrannosaur opens its jaws and shakes its head, then breathes and follows the pointer with its head; “Rebuild” takes it apart and it starts again.
A folder that runs on its own: index.html, style.css, script.js and the libraries from a CDN. The React and Vue tabs hold the same demo as a ready component, which switches its animations off when it leaves the page.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The museum skeleton on hover</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/full.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/bricolage-grotesque@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- a made-up natural history museum, Strata. In the great hall the T-rex plinth is empty: moving across the hall
(or tapping it) brings the bones flying in one by one, each snapping onto its neighbour with a puff of dust,
until the whole skeleton stands, opens its jaws and shakes its head. Hall, plinth, rope and bones are SVG
drawn by the script -->
<main class="sala" data-sala>
<svg class="fondo" data-fondo viewBox="0 0 1600 900" preserveAspectRatio="xMidYMax slice" aria-hidden="true"></svg>
<header class="testata">
<p class="marchio">
<svg viewBox="0 0 32 32" aria-hidden="true"><path d="M5 26h22M7 26V13M12 26V13M20 26V13M25 26V13M4 13h24L16 5Z"/></svg>
Strata
</p>
<p class="sotto">Museum of Natural History</p>
</header>
<div class="testo">
<h1 class="titolo">Rex is back <em>on its feet.</em></h1>
<p class="riga">The great hall reopens with its T-rex, bone by bone. Open daily, nine to six.</p>
<div class="azioni">
<a class="pillola" href="#visit"><span>Plan your visit</span></a>
<button class="rifai" type="button" data-rifai hidden>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M4 12a8 8 0 1 0 2.6-5.9M4 4v4.5h4.5"/></svg>
<span>Rebuild</span>
</button>
</div>
</div>
<div class="rex">
<svg class="rex__svg" data-rex viewBox="0 0 820 470" role="img" aria-labelledby="rex-nome">
<title id="rex-nome">A Tyrannosaurus rex skeleton being put together on its plinth</title>
</svg>
</div>
<p class="aiuto" data-aiuto>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M8 13V5.5a1.5 1.5 0 0 1 3 0V11m0-1.5a1.5 1.5 0 0 1 3 0V11m0-1a1.5 1.5 0 0 1 3 0v4.5a6 6 0 0 1-6 6h-.5a6 6 0 0 1-4.8-2.4L4.6 15a1.5 1.5 0 0 1 2.3-1.9L8 14"/></svg>
<span>Move across the hall to rebuild Rex</span>
<span class="aiuto__conta" data-conta aria-live="polite"></span>
</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>Change values, colours and text with the controls and watch the animation respond live. Or write in the code yourself. Then download the folder with your changes.
27 values to change
With the Animorio connector, Claude Code takes it from here, guide included, and fits it into your project. Paste this request:
Take “The museum skeleton on hover” from Animorio and fit it into my siteEach bone has a parent, the point on the parent it hangs from (a fraction of its length and an offset to the side), an angle and a length. On every frame calcola() works out from these numbers where each bone is and at what angle, from the pelvis out to the tips (forward kinematics). So no bone can come off its neighbour: the breath, the roar and the gaze only change angles.
Each bone is an SVG shape drawn along its axis, from the joint to the tip: long bones with their heads and a waisted shaft, vertebrae with their body, spine and, in the tail, the chevron below, curved ribs, the pelvis with ilium, booted pubis and ischium, the skull with its windows in the bone and its teeth, the jaw. A gradient from light ivory to shade, a brown outline, a line of light and a few cracks give them volume.
The flight is an extra offset on top of the computed place: it starts to the side and high up, rotated, at 0.85 of its size, and goes back to zero with different curves for x and y (so it makes an arc) and back.out on the scale, which gives the click. On arrival, a puff of dust ellipses that spread and fade, and a small elastic shiver of the whole skeleton.
pointermove adds up the distance the pointer travels: every STEP pixels the next group leaves; a tap calls one straight away. If nobody has moved for two seconds, one leaves every PACE seconds. Once Rex is complete and left alone for WAIT seconds, the hall takes it apart and builds it again.
A timeline opens the jaw by ROAR degrees and shakes the neck and head with a fast sine that dies away; then the ribs follow a slow sine (BREATH), the tail a wave and the head tilts up or down towards the pointer, with a soft follow.
| Name | File | Default | What it changes |
|---|---|---|---|
STEP | script.js | 70 | How many pixels the pointer travels to call the next group of bones. |
PACE | script.js | 0.3 | Seconds between groups when the hall builds Rex by itself. |
FLIGHT | script.js | 0.62 | How many seconds a bone flies before it lands. |
SNAP | script.js | 1.7 | How much a bone overshoots when it clicks into place (1 = none). |
DUST | script.js | 1 | How big the puffs of dust are (0 = none). |
ROAR | script.js | 26 | How wide the jaws open when Rex is complete, in degrees. |
BREATH | script.js | 1 | How much the ribs move with the breath (0 = still). |
WAIT | script.js | 4.5 | Seconds Rex stays complete before the hall takes it apart, if nobody moves. |
As the opening of a museum, an exhibition, a theme park or a guided tour, a site for children and schools, a science app; in general when a first screen should invite people to move and reward them with something that builds itself before their eyes.
The same animations with the sizes adapted: the skeleton and plinth take the whole width at the bottom of the hall, the title goes on one line above, and every tap on the hall calls a group of bones (a sliding finger calls them too). Left alone, Rex builds itself.
No flights, clicks, shivers or roar: each group of bones fades in at its place and Rex stays still, without breath or gaze; taking it apart is a fade.
GSAP 3.15.0, Fraunces (font variabile) 5.3.0, Bricolage Grotesque (font variabile) 5.3.0.
Compressed with gzip, the three demo files weigh 13 KB; the libraries: GSAP 28 KB.
Tested on 22 October 2026
Use it in your own projects and in your clients’ projects. Do not resell it or redistribute it as is. GSAP stays under its own Standard license. Full license.
With your account’s email and password.
or with your email
You’re signed in as .
With your account, you can download the zip of every animation and every pack, for free.