172

Deconstructed Launch Page

£7
or the whole Vault, £99

Pinned scroll section where a finished product landing page bursts into a 3D cloud of its own live components (nav, headline words, product photo, feature cards, price and button), then scrolling pulls each part home in captioned chapters until the real, working page is back together.

ScrollTriggerFlipSplitText Lenis advanced
10 more details
DraggableInertiaPlugin pinningscroll-storytelling3d-transformssplit-textflip-layoutdraggablespring-physicsparallax

Released

About this effect

A complete product launch page appears for a beat, then bursts outward from its call to action into a cloud of its own parts. The navigation, every word of the headline, the product photo, the finish picker, the feature cards, the review, the price and the button all float apart at different depths, each with a soft shadow and a slow drift, while dashed outlines on the page mark where each one belongs.

Read the full effect overview

Scrolling rebuilds the page in five captioned chapters: structure, headline, product, proof and price. Each group flies home to its measured slot, and a fast flick of the wheel lands them with a small overshoot. On a desktop any loose part can be grabbed and thrown; it waits wherever it lands until its chapter calls it home. When the last part settles, the transforms are cleared and the page is ordinary, crisp HTML: the finishes swap the photo, the quantity toggle reprices, Add to bag fills the bag, and Pull it apart starts the show again.

Deconstructed Launch Page - GSAP animation effect preview

What's included

9 items
  • Every part is a live DOM component measured from your own layout, so the explosion and the assembly follow whatever page you put inside it
  • Group parts into chapters with one data-chapter attribute; each chapter has its own caption and lands in sequence with a stagger
  • Headlines split into words with SplitText and scatter as a cascade in reading order, nearest to the viewer
  • Projected depth: parts sit at different distances from the camera, with pointer parallax by depth and pre-blurred shadows that rise with height
  • A spring follows the scroll, so slow scrolling glides parts home and a fast flick lands them with a velocity-keyed overshoot
  • Grab and throw any floating part with Draggable and InertiaPlugin, kept inside the stage; it flies home from where it was left when its chapter arrives
  • Settles at no transform at all, so the finished page text is as sharp as a normal page
  • Working demo page: finish swatches with a Flip-animated ring, a Flip pair toggle that reprices, Add to bag, and a Pull it apart control
  • Phones get a flatter explosion with whole headings as single parts and no dragging; reduced motion shows the finished page with no pin

Perfect for

5 use cases
  • Product launch pages that open by building themselves, so the offer lands at the end of the scroll
  • Black Friday and seasonal sale reveals where the price and button are the final chapter
  • Agency and studio case studies showing how a landing page was designed, section by section
  • SaaS and template marketplaces demonstrating that a page is built from real, reusable components
  • Design system and front-end portfolio pages that want a memorable, developer-pleasing opener

How it works

2 sections

The page inside the effect is ordinary HTML in its real order, so screen readers and search engines get the finished content throughout. On load the script measures where every marked part sits in that layout, then generates an exploded position for each: an offset away from the centre of the page, a distance from the camera and a tilt. Large parts sit further back and small ones come forward, passes push apart any parts that would bury each other, and of eight seeded layouts the two with the least overlap are kept and alternate on each replay.

ScrollTrigger pins the section and maps the scroll to five chapters. Each part has a target between exploded and home, and a spring follows it, which gives the glide on slow scrolls and the overshoot on fast ones. Each frame projects the part through the camera so nearer parts move and scale more, and its shadow rises with it. Everything is re-measured whenever the layout changes, so parts never fly home to an old position, and once a part is home its transform is removed entirely.

Plugins ScrollTrigger, Flip, SplitText, Draggable, InertiaPlugin
Difficulty Advanced
Smooth scroll Lenis integration
Includes HTML + JS + CSS source, documentation, AI setup prompt, lifetime updates

Lighthouse, as measured

Google Lighthouse on this effect's demo, from the latest scan. A measurement of the demo as shipped, not a promise for your page.

Accessibility
100
Best practices
100

No performance score, on purpose. That figure depends on how you deploy: your server's compression and caching, your CDN, the connection and the device doing the test, none of which the code controls. The same page can score very differently on two consecutive runs, so measure it where it will live.

The Vault opens this source and the whole library.

Each product gives you the HTML, CSS and JavaScript source, the full documentation and an AI setup prompt, licensed for unlimited personal and commercial projects. Every paid product is tested for desktop and mobile layouts, reduced-motion handling, animation cleanup and keyboard controls wherever there is something to operate.

One payment, over 300 products, and future additions to the library.

Documentation

Quick Start

1. Add to your HTML <head>:

In your downloadThe working code for this step, in index.html.

2. Add the section to your <body>. Put your page inside [data-dlp-page] and give each part a chapter number:

In your downloadThe working code for this step, in index.html.

3. Add before the closing </body> tag:

In your downloadThe working code for this step, in index.html.

The script mounts every [data-dlp] section once the web fonts load (or after 600ms at most), pins it for the configured runway and releases it once the page is assembled. The opening burst then runs on a fixed clock: the button presses, a ring leaves it, the page detonates past its spots and settles, and the dashed slots draw in. A font that arrives late only triggers a re-measure.

The demo's faces (Instrument Serif and Instrument Sans, SIL Open Font License 1.1) are self-hosted in assets/fonts/ and preloaded in the <head>, so the headline is set in its own face before it splits; assets/fonts/OFL.txt holds the licence and copyright notices. Self-hosting or preloading your own display face matters here for the same reason: a late font swap reflows the page the visitor has just seen.

Using It With Your Own Design

What the effect needs from your markup:

  • A root [data-dlp] and, inside it, one [data-dlp-page]. The page element is the positioning context for the parts and the generated slots and shadows, and it is the layer the camera zooms.
  • data-chapter="n" on each part, starting at 1. Parts in a chapter land together, staggered in document order. Mark the visual blocks a visitor would recognise (a card, a button, a photo, a heading), not every span. Aim for about 24 parts or fewer.
  • Parts must not be nested inside other parts, and must not rely on a CSS transform for positioning: the script owns each part's transform. Position with insets, margins, flex or grid instead.
  • data-dlp-split on a heading splits it into words (desktop only) that fly as separate parts in reading order. On phones the heading stays one part.
  • data-dlp-origin on one element sets where the opening burst starts from. Without it, the last part bursts first.
  • The caption bar is optional. [data-dlp-steps] > li gets is-active for the current chapter, [data-dlp-cue] before the first chapter, [data-dlp-done] when the page is assembled, and each [data-dlp-meter] > i gets a --fill value from 0 to 1. [data-dlp-reset] is shown when the page is assembled.

What is only the demo's styling: everything prefixed .lp- in style.css (the lamp brand page, its fonts, palette and photos), the construction grid on the ground, and the look of the caption bar. The mountDemoPage function at the end of script.js (finish swatches, quantity toggle, Add to bag) is demo behaviour too; delete it with the demo page.

CSS the effect depends on (marked REQUIRED in style.css):

  • The root is one viewport tall with overflow: hidden, so the cloud never causes page scroll.
  • [data-dlp-page] is position: relative with isolation: isolate, so floating parts can stack above one another by depth.
  • :where(.dlp [data-chapter]) gives parts position: relative and a z-index above the generated .dlp__slot and .dlp__shadow layers. It has zero specificity, so your own position: absolute still wins.
  • .dlp.is-live .dlp__page drops the page background while the effect runs; the generated .dlp__fill fades the paper back in as chapter 1 lands. If you change the page colour, change .dlp__fill to match.
  • .dlp__flash is the ring that leaves the burst origin, and .dlp.is-celebrating is set for about a second when the last part lands (the demo uses it for a sheet lift, a shine across the button and a meter sweep). Restyle or drop both freely.

Options

Set these on the [data-dlp] root.

Attribute Values Default Description
data-spread 0 to 2.5 1 How far parts travel from their slots
data-depth 0 to 2 1 Depth range of the cloud: nearer parts scale and parallax more
data-runway Pixels 2800 Scroll distance for the full assembly on screens 768px and wider
data-mobile-runway Pixels 2000 Scroll distance on phones
data-reexplode true, false true false keeps landed parts home when the visitor scrolls back up
data-drag true, false true Grab and throw floating parts (fine pointers only)
data-intro true, false true Show the finished page, then burst it apart on load. false starts already exploded
data-split true, false true Allow data-dlp-split headings to split into words
data-seed Integer 11 Base seed for the exploded layout. Eight layouts are tried from it, scored by how much parts overlap (text over text counts triple), and the two cleanest alternate on each Pull it apart
data-dlp-static 0 to 1 none Freeze at this scroll progress with no pin, drift or intro (posters and screenshots)

Accessibility

  • Real content throughout. The page is ordinary HTML in its real reading order. Parts only ever move with transforms, so screen readers, search engines and find-in-page get the assembled content at every scroll position. Split headings keep an accessible label from SplitText.
  • Reduced motion. With prefers-reduced-motion: reduce there is no pin, no explosion and no caption bar: the finished page is shown immediately and every control works. Switching the preference while the page is open rebuilds the effect in place.
  • Keyboard. All controls are native buttons and links with visible focus. Tabbing to a floating part calls it home, and keyboard activation always goes through, even while the part is still flying in. A floating part ignores pointer clicks until it is home, so a stray click during the show cannot add to the bag. After Pull it apart, focus moves to the section so keyboard users stay in place.
  • Touch. Phones get a flatter explosion with whole headings as single parts, no dragging (touch scrolls the page as normal) and the same chapter captions.
  • No JavaScript. Without the script, or if a required CDN file fails, the page is simply shown assembled.

Dependencies

Required:

  • GSAP 3.13+ (the demo is built against 3.15.0; SplitText.create and the public SplitText and InertiaPlugin builds need 3.13)
  • ScrollTrigger

Optional, each feature switches off cleanly without its plugin:

  • SplitText (headline words as separate parts)
  • Draggable and InertiaPlugin (grab and throw)
  • Flip (the demo page's swatch ring and quantity toggle)
  • Lenis 1.3+ (smooth scrolling)

Demo assets: the Mira lamp photographs in assets/img/ are generated concept imagery of a fictional product, made for this demo. Replace them with your own product photography.

Also in your download: the full source, worked examples, the events and programmatic API, and the class reference.

£7