v2 · scrollAnimate · staggered list

Feature list cascade on scroll

The staggered feature row is one of the most reused blocks in marketing pages, and the detail that makes it feel deliberate is per-row trigger offsets rather than one delay multiplied out. Each row gets its own trigger point, so the cascade tracks the reader’s scroll rather than running on a fixed clock once the section appears.

The code

Four feature rows slide in from the left on scroll with staggered scrollAnimate calls — each row has its own trigger offset for a natural cascade. The same pattern works with scrollText split: "lines" for text blocks.

Hero.tsx
import { scrollAnimate } from 'svg-scroll-draw';

// Each row has its own trigger offset — a 5% stagger
// in start position creates a natural waterfall effect.
const rows = document.querySelectorAll('.feature-row');

rows.forEach((row, i) => {
  scrollAnimate(row, {
    props: {
      opacity:   [0, 1],
      transform: ['translateX(-20px)', 'translateX(0)'],
    },
    trigger: {
      start: `top ${90 - i * 5}%`,
      end:   `top ${60 - i * 5}%`,
    },
    easing: 'ease-out',
    once:   true,
  });
});

// Or use scrollText with split: 'lines' for text blocks:
// scrollText('#features', {
//   split: 'lines', stagger: 0.08,
//   from: { opacity: 0, x: -20 },
//   once: true,
// });

Live — scroll it

Why developers choose it
Native CSS compositor path. Zero JS on Chrome.
🧩React, Vue, Svelte, Solid, Angular, Astro, Nuxt.
📦~10 KB gzipped. Zero runtime dependencies.
aria-label, aria-hidden, prefers-reduced-motion.

Install

terminal
npm i svg-scroll-draw

MIT licensed, zero runtime dependencies. Every API is a separate entry point, so you only ship what you import. Full API reference →