Scroll Animations & Parallax Sections

Velocity Image Strip

A horizontally scrolling image strip that runs at a constant baseline speed and accelerates in proportion to the reader's scroll velocity. Faster scrolling pushes the strip faster; letting go lets it decay back to baseline. Great for portfolio sections, agency work strips, and image galleries that want kinetic energy without a click.

Live preview

Loading preview

No extra dependencies. React 18+ and Tailwind CSS v3+ assumed. Save as VelocityImageStrip.tsx.

Or rebuild it with a prompt

Paste the prompt into the tool you already use. Each version is written specifically for that tool, matched to the same design constraints so the output stays consistent.

Build components/VelocityImageStrip.tsx. Section: bg-white overflow-hidden. Header area (px-8 sm:px-16 pt-16 pb-10): eyebrow p (12px text-gray-400 tracking-widest) and heading h2 (36-52px font-semibold tracking-tight black max-w-[640px]). Strip area: relative overflow-hidden pb-16. Inside: a trackRef div (flex gap-4 px-4 will-change-transform) containing [...images, ...images] (doubled for seamless loop). Each image card: shrink-0 w-[260px] aspect-[3/4] rounded-xl overflow-hidden img object-cover. A rAF loop in useEffect reads window.scrollY each frame to calculate dy (delta from last frame) and adds dy*0.04 to a velocityRef. Velocity decays by 0.92 each frame. Current position accumulates: posRef.current -= (BASE_SPEED + velocityRef) * dt where BASE_SPEED = 0.28 px/ms. When |posRef| exceeds half the track scrollWidth, reset by adding halfWidth. Apply transform translate3d. On scroll event (passive), store window.scrollY for dy calculation. Respect prefers-reduced-motion (skip rAF). Props: images: StripImage[] ({ src, alt? }), eyebrow, heading. Single default export. Export StripImage type.

How to use this Velocity Image Strip as a prompt

  1. Paste the prompt into Claude Code, Cursor, or Google Stitch to build a Velocity Image Strip where strip speed scales with the reader's React scroll velocity.
  2. Best for agency portfolio strips, work showcase sections, and image galleries where baseline motion plus scroll-driven energy creates a memorable interaction.
  3. Ask Codex or Lovable to reverse the strip direction on mobile, or add a second row running in the opposite direction.

How to use this Velocity Image Strip as code

  1. Drop the React + Tailwind file into `components/sections/` and pass an images array of { src, alt } objects.
  2. Uses a requestAnimationFrame loop with scroll velocity accumulation and exponential decay for the speed boost. No framer-motion dependency needed.
  3. Compatible with Next.js App Router, Astro, and Vite React. Respects prefers-reduced-motion by freezing motion.

Other React parallax and scroll animation components like the Velocity Image Strip

More parallax and scroll animation components with matching AI prompts for Claude Code, Cursor, Codex, Lovable, Replit, and Google Stitch.

Related prompts for scroll animations & parallax sections

Frequently asked questions about the Velocity Image Strip

How do I add a Velocity Image Strip to my website?+

Copy the source code from the "Copy code" button above and save it as a .tsx file in your components folder. The Velocity Image Strip is built with React and Tailwind CSS — add those as dependencies if they are not already in your project. Import and render the component wherever you need it. Every prop is optional and typed.

Can I use the Velocity Image Strip with Claude Code, Cursor, or Lovable?+

Yes. Each prompt tab above is tuned specifically for Claude Code, Cursor, Codex, Lovable, Replit, and Google Stitch. Paste the prompt into whichever AI coding tool you are using and it will generate a Velocity Image Strip matched to your existing file structure, design tokens, and brand color. Claude Code and Cursor work best when your project is already open — they slot the component directly into your codebase. Lovable and Replit are fastest for a standalone preview.

How do I customise the marquee design and colors?+

The Velocity Image Strip uses Tailwind utility classes throughout, so every color, spacing value, and font weight is one class away from changing. Replace any color class with your brand token (for example, swap `bg-black` for `bg-[#your-hex]`). To change the animation timing, update the `duration-` or `delay-` classes, or pass new values into the Framer Motion `transition` prop if the component uses it. For a full brand restyle, paste the component into Claude Code or Cursor and describe your design system.

Is the Velocity Image Strip free to use in commercial projects?+

Yes. Every component in the AI Library, including the Velocity Image Strip, is free to copy, adapt, and ship in commercial projects, client work, SaaS products, open-source repos, and internal tools. No attribution required, no license fee, no royalty.

What scroll frameworks does the Velocity Image Strip support?+

The Velocity Image Strip is a plain React 18 client component written in React + Tailwind. It runs on Next.js (App Router and Pages Router), Vite, Remix, Gatsby, and any other framework that supports React 18 and Tailwind CSS v3. Keep the "use client" directive at the top of the file when you paste it into a Next.js App Router project.

Does the Velocity Image Strip work with TypeScript?+

Yes. The component is written in TypeScript with fully typed props and exported interfaces. Paste it into a TypeScript project and it compiles without modification. If you need a plain JavaScript version, ask Claude Code or Cursor to strip the type annotations.

Can I combine the Velocity Image Strip with other AI Library sections?+

Yes. Every component in the AI Library is standalone with no shared global state, no conflicting resets, and no namespace collisions. Drop the Velocity Image Strip alongside any other section component. They are compatible with shadcn/ui, Radix UI, MUI, and any other component library you are already using.