v2 · scrollAnimate · staggered listThe 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.
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.
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,
// });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 →
Headline text reveal on scroll
Split a headline into words or characters and stagger them in on scroll. A 2.5 KB alternative to GSAP SplitText, with accessible markup.
Fan-out animation on scroll
Reveal a whole grid of elements together with scrollAnimateGroup. One call, one timeline, one observer — no per-element boilerplate.