tween
ComponentsTemplatesShowcaseContact

Command Palette

Search for a command to run...

Getting Started
  • Introduction
  • Installation
  • StoryNew
Guides
  • Motion Principles
  • Scroll and Smooth Scroll
  • Performance and Accessibility
Scroll Animations
  • Sticky Cards Scroll
  • Rise Fan Cards Scroll
  • Rotate Stack Scroll
  • Doodle Lens ScrollNew
  • Slit Open Hero ScrollNew
  • Logo Mask Zoom ScrollNew
  • ASCII Dissolve ScrollNew
  • Lottie Flight ScrollNew
  • Inline Icon Text ScrollNew
  • Starfield ScrollNew
  • Name Swap ScrollNew
  • Spotlight Gallery HeroNew
  • Slit Rotate Hero ScrollNew
  • Stroke Cover ScrollNew
  • Stroke Rows ScrollNew
Text Animations
  • Text Skew Reveal
  • Block Text Reveal
Hover & Cursor
  • Image Trail Cursor
  • Cursor Depth Logo
  • Physics Tag Drop
  • Elastic Card ListNew
  • Magnetic Cards SpringNew
Sliders & Carousels
  • Wheel Fullscreen Carousel
  • Ripple Displacement Slider
  • Three.js Blend Slider
  • Stacked Deck Slider
  • Orbit Cylinder SliderNew
  • Fan Stack SliderNew
  • Exponential Strip SliderNew
  • Dual Column SliderNew
Galleries & Grids
  • Scroll Wave Gallery
Menus & Navigation
  • Shrink Page MenuNew
Preloaders & Intros
  • Floating Items RevealNew
  • Word Cycle RevealNew
  • Tile Grid LoaderNew
Page Transitions
  • Panel Assembly TransitionNew
3D & WebGL
  • Fractal Glass Hero
  • Fluid Cursor Canvas
  • Fluid Portrait Hero
  • Fluid Gradient Canvas
  • Inversion Lens HoverNew
UI Elements
  • Circular Widgets
  • Vinyl Cover
  • Image Explosion Footer
  • Accordion Image FramesNew

(Tween) — Motion registry

Animated components & full sites, one command away.

Product

  • Components
  • Templates
  • Installation
  • Guides
  • Blog
  • Contact

Categories

  • Scroll Animations
  • Text Animations
  • Hover & Cursor
  • Sliders & Carousels
  • Galleries & Grids
  • Menus & Navigation
  • Preloaders & Intros
  • Page Transitions
  • 3D & WebGL
  • UI Elements
TWEEN
ease: power2.inOut0.00s
© 2026 TweenBack to topBuilt by mohammad
  1. Docs/
  2. Components/
  3. Image Explosion Footer

Image Explosion Footer

PreviousNext

A footer that blasts image particles upward with physics-driven gravity and friction, then re-arms the explosion on scroll.

Open in
image-explosion-footer-demo

Index — 2019 to 2026

Forty-one campaigns, nine cities, and a new backdrop colour for every single one.

Scroll for the contact sheet

The hard ones, please

© 2026 Atelier Oberin

Lisbon, Oslo, by appointment.

components/ui/image-explosion-footer-demo.tsx
"use client"

import { ImageExplosionFooter } from "@/registry/tween/image-explosion-footer"

export function ImageExplosionFooterDemo() {
  return (
    <div
      className="relative w-full overflow-hidden"
      style={{ backgroundColor: "#0f0f0f" }}
    >
      <section
        className="relative flex w-full items-center justify-center bg-[#0f0f0f] text-white"
        style={{ height: "var(--preview-h, 100vh)" }}
      >
        <div className="max-w-[60ch] px-8 text-center">
          <p className="font-mono text-[0.7rem] tracking-[0.2em] text-white/60 uppercase">
            Index &mdash; 2019 to 2026
          </p>
          <h2
            className="mt-4 text-[clamp(1.5rem,4cqi,3rem)] leading-[1.15] font-medium uppercase"
            style={{ letterSpacing: "-0.02em" }}
          >
            Forty-one campaigns, nine cities, and a new backdrop colour for
            every single one.
          </h2>
          <p className="mt-6 font-mono text-[0.7rem] tracking-[0.2em] text-white/50 uppercase">
            Scroll for the contact sheet
          </p>
        </div>
      </section>

      <ImageExplosionFooter />
    </div>
  )
}

Installation

pnpm dlx shadcn@latest add https://tweenui.dev/r/image-explosion-footer.json

Usage

import { ImageExplosionFooter } from "@/components/ui/image-explosion-footer"
<ImageExplosionFooter
  headline="The hard ones, please"
  images={[
    "https://images.example.com/campaign-01.jpg",
    "https://images.example.com/campaign-02.jpg",
    "https://images.example.com/campaign-03.jpg",
    "https://images.example.com/campaign-04.jpg",
  ]}
/>

When the footer scrolls into view, every image is launched from the headline as a particle with an initial upward velocity. Each frame, gravity pulls particles back down while friction decays their velocity, so they arc up, slow, and fall — a lightweight physics simulation rather than a fixed keyframe path. horizontalForce, verticalForce, and rotationSpeed control how wide the burst spreads and how fast particles tumble, so small tweaks change the whole character of the explosion. Once the particles have cleared, the component waits resetDelay milliseconds and re-arms, so scrolling away and back triggers a fresh blast. The headline, topSlot, and bottomSlot render as normal footer content above and below the particle layer, making this a drop-in replacement for a standard site footer with a memorable entrance.

Props

PropTypeDefaultDescription
imagesstring[]7 defaultsURLs of the particle images.
headlineReactNodeDefault copyLarge headline shown above the explosion.
topSlotReactNode—Custom content rendered at the top of the footer.
bottomSlotReactNode© lineCustom content rendered at the bottom of the footer.
gravitynumber0.25Downward acceleration applied each frame.
frictionnumber0.99Per-frame velocity decay (closer to 1 = floatier).
imageSizenumber150Width of each particle in pixels.
horizontalForcenumber20Spread of initial horizontal velocity.
verticalForcenumber15Base initial upward velocity (a random extra is added).
rotationSpeednumber10Spread of initial angular velocity.
resetDelaynumber600Milliseconds to wait before re-arming the explosion.
scrollerHTMLElement | null—Override scroller; defaults to the ambient usePreviewScroller().
backgroundstring"var(--background)"Footer background color.
inkstring"var(--foreground)"Foreground color used for headline and bottom slot.
classNamestring—Extra classes on the outer footer.
Vinyl CoverAccordion Image Frames

On This Page

InstallationUsageProps

Contribute

  • Report an issue
  • Request a feature
  • Edit this page