ScrollReveal

Hintergrund-Effekte

Wrapper für Scroll-getriggerte Einblendungen mit sechs Varianten (fade-up, blur-in, zoom-in, …). Standard: IntersectionObserver + CSS-Transition. Mit scrub koppelt sich die Animation an die Scroll-Position (natives CSS animation-timeline: view()) und läuft beim Zurückscrollen rückwärts.

Live Demo

↓ Scrollen Sie nach unten — die Blöcke blenden sich beim Erscheinen ein
Fade Upvariant="fade-up"
Blur Invariant="blur-in"
Zoom Invariant="zoom-in"
Slide Leftvariant="slide-left"
Slide Rightvariant="slide-right"
Fade Invariant="fade-in"
Scrub-Modusscrub — an die Scroll-Position gekoppelt, läuft beim Zurückscrollen rückwärts (animation-timeline: view(), Fallback: Observer)

Props / API

PropTypPflichtDefaultBeschreibung
childrenReactNodeJaEinzublendender Inhalt
variant'fade-up' | 'fade-in' | 'blur-in' | 'zoom-in' | 'slide-left' | 'slide-right'Nein'fade-up'Animations-Variante
delaynumberNein0Verzögerung in ms (für Stagger-Effekte)
durationnumberNein700Dauer in Millisekunden
distancenumberNein36Distanz in Pixeln (fade-up / slide-*)
oncebooleanNeintrueNur einmal animieren
thresholdnumberNein0.15Sichtbarkeits-Schwelle (0–1)
scrubbooleanNeinfalseAn Scroll-Position koppeln (animation-timeline: view(), mit Observer-Fallback)
classNamestringNeinZusätzliche CSS-Klasse

Code-Beispiel

<ScrollReveal variant="fade-up">
  <h2>Unsere Leistungen</h2>
</ScrollReveal>

{/* Stagger über delay: */}
{leistungen.map((item, i) => (
  <ScrollReveal key={i} variant="blur-in" delay={i * 120}>
    <LeistungsCard {...item} />
  </ScrollReveal>
))}

{/* An Scroll-Position gekoppelt (läuft rückwärts beim Zurückscrollen): */}
<ScrollReveal variant="zoom-in" scrub>
  <img src="/images/galerie.jpg" alt="" />
</ScrollReveal>