Revealing Effects
React Awesome Reveal exports a number of ready-to-use animated primitives to automagically ✨ animate your components.
By default, all animations are triggered when the content they wrap enters the viewport.
Available Effects
The default set of effect is inspired by Animate.css:
Bounce
Fade
Flip
Hinge
JackInTheBox
Roll
Rotate
Slide
Zoom
Each of them is a named export, so to import the Slide
component you simply write:
import { Slide } from "react-awesome-reveal";
Animation Props
All animated primitives support the following props to change the animation physics.
direction
Where applicable, this changes the origin of the animation. It can be "down"
, "left"
, "right"
or "up"
, with some exceptions documented in the component API (see the TSDoc comments).
delay
Time to wait before the animation starts (in milliseconds).
Defaults to 0
.
duration
The animation duration (in milliseconds).
Defaults to 1000
(one second).
fraction
How much an element should be in the viewport before the animation is triggered.
It must be a number between 0
and 1
, with 0
meaning that the animation starts as soon as the component intersects the vieport, and 1
meaning that the animation does not start unless the component is fully contained in the viewport.
Defaults to 0
.
triggerOnce
Boolean prop that determines if the animation should run only once or everytime an element enters/exits/re-enters the viewport.
Defaults to false
.
cascade
Boolean prop to stagger the animation (see Staggered Animations).
It works by assigning a progressive delay to each direct child wrapped by an animated primitive – this is particularly useful for animating list items.
Defaults to false
.
damping
Factor that affects the delay that each animated component in a cascade animation will be assigned.
If damping = 1
then the delay will be equal to the animation duration; if 0 < damping < 1
then the delay will be lower than the animation duration; if damping > 1
then the delay will be greater than the animation duration.
Defaults to 0.5
(meaning that the delay will be half of the animation duration).
className
and style
CSS class names and styles to attach to the element that React Awesome Reveal creates to wrap your own components.
childClassName
and childStyle
CSS class names and styles to attach to the elements that you pass inside any animated primitive.
onVisibilityChange
(inView: boolean, entry: IntersectionObserverEntry) => void
Callback executed when the element enters or leaves the viewport.
If an animated primitive directly wraps multiple children, this function is called on each of them, and the entry
argument holds the reference to the current element.
Staggered Animations
To chain together multiple animations, set the cascade
prop to true
:
<Fade cascade>
<p>I enter first...</p>
<p>...then comes my turn...</p>
<p>...and finally you see me!</p>
</Fade>
Play with the damping
prop to alter the delay by which each child will progressively appear:
<Fade cascade damping={0.1}>
<p>I enter first...</p>
<p>...then comes my turn...</p>
<p>...and finally you see me!</p>
</Fade>
Animating Lists
A particularly 🆒 use case for staggered animations is list animation.
React Awesome Reveal detects if you pass a ul
or ol
element and, if cascade
is true
, it automatically creates a staggered animation for each li
element:
<Fade cascade>
<ul>
<li>I enter first...</li>
<li>...then comes my turn...</li>
<li>...and finally you see me!</li>
</ul>
</Fade>
Animating Texts
To animate a text, simple wrap it in an animated primitive and set the cascade
prop:
<Fade cascade>Each character will appear one by one</Fade>