A set of React components using React Transition Group to provide drop in GPU accelerated animations and wrappers for group effects.
npm install react-animation-components
Make sure you also have installed the following peer dependencies:
"react": "^16.0.0",
"react-dom": "^16.0.0",
"react-transition-group": "^2.2.1",
"prop-types": "^15.6.0"
The following are available on any animation component as well as any valid Transition
props. Transitions are set to appear
and their timeout
is calculated by combining the delay
and duration
by default but can be overwritten.
Key | Description | Example | Type | Default Value |
---|---|---|---|---|
className | Passes className to wrapper div |
some-class |
string | undefined |
delay | Sets the animations transitionDelay |
500 |
number | 0 |
duration | Sets the animations transitionDuration |
1000 |
number | 500 |
style | Passes styles to wrapper div |
{ display:'flex' } |
object | {} |
timingFn | Sets the animations transitionTimingFunction |
'ease-in-out' |
string | 'ease' |
Transitions the wrapped element's opacity from one value to another
Key | Description | Example | Type | Default Value |
---|---|---|---|---|
enterOpacity | The opacity value when in is true |
0.85 |
number | 0 |
exitOpacity | The opacity value when in is false |
0.25 |
number | 0 |
import { Fade } from 'react-animation-components'
<Fade in>
<h1>I'm transitioning to opacity:1</h1>
</Fade>
<Fade in enterOpacity={0.85}>
<h1>I'm transitioning to opacity:0.85</h1>
</Fade>
<Fade in={false}>
<h1>I'm transitioning to opacity:0</h1>
</Fade>
<Fade in={false} exitOpacity={0.25}>
<h1>I'm transitioning to opacity:0.25</h1>
</Fade>
Transitions the wrapped element from one transform property to another. Any valid transform
property will work.
Key | Description | Example | Type | Default Value |
---|---|---|---|---|
enterTransform | The transform value when in is true |
'translateX(100px)' |
string | 'none' |
exitTransform | The transform value when in is false |
'translateX(100px)' |
string | 'none' |
import { Transform } from 'react-animation-components'
<Transform enterTransform="translateX(100px)" in>
<h1>I'm transitioning from my initial position to 100px right when `in` is `true`</h1>
</Transform>
<Transform enterTransform="translateX(100px)" exitTransform="translateX(-100px)" in>
<h1>
I'm 100px to the left of my initial position and
I transition 100px right of my initial when `in` is `true`
</h1>
</Transform>
<Transform enterTransform="rotate(90deg)" in>
<h1>I transition from initial positon to rotate 90deg when `in` is `true`</h1>
</Transform>
Composes Fade
and Transform
. All top level props are passed to both components. You can also pass props to individual components in the composition.
Props passed to indivudal components via fadeProps
or transformProps
will override any top level props
Key | Description | Example | Type | Default Value |
---|---|---|---|---|
fadeProps | The props that only Fade recieves. |
{ enterOpacity: 0.85 } |
object | {} |
transformProps | The props that only Transform recieves. |
{ enterTransform: 'translateX(100px)' } |
object | {} |
import { FadeTransform } from 'react-animation-components'
<FadeTransform in transformProps={{ enterTransform: 'translateX(100px)' }}>
<h1>I'm transitioning from my initial position to 100px right when `in` is `true`</h1>
</FadeTransform>
<FadeTransform
in
transformProps={{
enterTransform: 'translateX(100px)',
exitTransform: 'translateX(-100px)'
}}
>
<h1>
I'm 100px to the left of my initial position and
I transition 100px right of my initial when `in` is `true`
</h1>
</FadeTransform>
<FadeTransform
in
transformProps={{
exitTransform: 'translateX(-100px)'
}}
fadeProps={{
enterOpacity: 0.85,
}}
>
<h1>I transition from `-100px` horizontally of my initial positon and to 0.85 opacity when `in` is `true`</h1>
</FadeTransform>
Wrapper components use the inner animation components onEntered
and onExited
. Setting those callbacks inside these wrappers will not work
Uses TransitionGroup
to stagger delay
on a set of animation components
Key | Description | Example | Type | Default Value |
---|---|---|---|---|
chunk | Used to limit the stagger into "chunks". | 5 |
number | 0 |
delay | The amount to separate each stagger by | 1000 |
number | 100 |
duration | A value to set the inner child animations transition duration | 800 |
number | 500 |
in | A boolean to tell the children to mount or unmount | true |
boolean | false |
onComplete | A function that is called after the last animation finishes | any valid function | function | Function.prototype(noop) |
reverse | A boolean to tell the component to reverse how delays are applied | true |
boolean | false |
import { Fade, Stagger } from 'react-animation-components'
const items = ['first', 'second', 'third', 'fourth', 'fifth'];
<Stagger in>
{items.map(
item => (
<Fade>
<h1>Each {item} will transition in with an incrementally larger delay than the previous</h1>
</Fade>
)
)}
</Stagger>
<Stagger chunk={4} in>
{items.map(
item => (
<Fade>
<h1>
Each {item} will increment in segments of 4.
First is 0, Second is 100, Third is 200, Fourth is 0, fifth is 100, and so on
</h1>
</Fade>
)
)}
</Stagger>
Uses TransitionGroup
to randomize delay
on a set of animation components
Key | Description | Example | Type | Default Value |
---|---|---|---|---|
duration | A value to set the inner child animations transition duration | 800 |
number | 500 |
in | A boolean to tell the children to mount or unmount | true |
boolean | false |
maxDelay | Maximum delay possible | 5000 |
number | 1500 |
minDelay | Minimum delay possible | 100 |
number | 0 |
onComplete | A function that is called after the last animation finishes | any valid function | function | Function.prototype(noop) |
reverse | A boolean to tell the component to reverse how delays are applied | true |
boolean | false |
import { Fade, Random } from 'react-animation-components'
const items = ['first', 'second', 'third', 'fourth', 'fifth'];
<Random in>
{items.map(
item => (
<Fade>
<h1>Each {item} will randomly FadeIn between 0 and 1500ms</h1>
</Fade>
)
)}
</Random>
<Random minDelay={1000} maxDelay={5000} in>
{items.map(
item => (
<Fade>
<h1>Each {item} will randomly FadeIn between 1000ms and 5000ms</h1>
</Fade>
)
)}
</Random>
Loops using the onEntered
and onExited
callbacks to toggle in
on a single animation component.
Key | Description | Example | Type | Default Value |
---|---|---|---|---|
in | Initializes the loop when true |
true |
bool | false |
interval | Sets the interval to toggle in . Also sets the duration |
1000 |
number | 500 |
iterations | Maximum number of loops | 5.5 |
number | Infinity |
onComplete | Callback that is called when the iterations have been met. Waits an additional interval to ensure its called when the last iteration has completed |
any valid function | function | Function.prototype(noop) |
onIterate | Callback that is called with the current count each time the loop iterates. Count is incremented by 0.5 |
any valid function | function | Function.prototype(noop) |
import { Fade, Loop } from 'react-animation-components'
<Loop in>
<Fade>
<h1>I will Fade in and out repeatedly on 500ms intervals</h1>
</Fade>
</Loop>
<Loop in iterations={5.5}>
<Fade>
<h1>I will Fade in and out repeatedly on 500ms intervals 5.5 times</h1>
</Fade>
</Loop>