AnimatedReact is a lightweight animation library for React, inspired by Jetpack Compose. It provides a set of simple yet powerful animation functions to enhance UI transitions with ease.
To install AnimatedReact, run:
npm install animatedreactBelow is a list of all available animation functions and their parameters:
| Function | Parameters |
|---|---|
fadeIn |
duration (ms), initialAlpha (0-1), easing |
fadeOut |
duration (ms), targetAlpha (0-1), easing |
scaleIn |
duration (ms), initialScaleX, initialScaleY, originX, originY, easing |
scaleOut |
duration (ms), targetScaleX, targetScaleY, originX, originY, easing |
expandIn |
width, height, duration (ms), easing |
expandInHorizontally |
width, duration (ms), easing |
expandInVertically |
height, duration (ms), easing |
shrinkOut |
width, height, duration (ms), easing |
shrinkOutHorizontally |
width, duration (ms), easing |
shrinkOutVertically |
height, duration (ms), easing |
slideIn |
xPercentage, yPercentage, duration (ms), easing |
slideOut |
xPercentage, yPercentage, duration (ms), easing |
slideInHorizontally |
xPercentage, duration (ms), easing |
slideInVertically |
yPercentage, duration (ms), easing |
slideOutHorizontally |
xPercentage, duration (ms), easing |
slideOutVertically |
yPercentage, duration (ms), easing |
blurIn |
duration (ms), initialBlur, easing |
blurOut |
duration (ms), targetBlur, easing |
combinedIn |
animations (array of enter effects) |
combinedOut |
animations (array of exit effects) |
Easing functions control the animation speed curve. The library provides predefined options:
LinearEaseInEaseOutEaseInOutEnterDefault(default:EaseIn)ExitDefault(default:EaseOut)
For custom easing, you can create your own by using the constructor:
const customEasing = new Easing("cubic-bezier(0.42, 0, 0.58, 1)");<AnimatedVisibility enter={enterEffect} exit={exitEffect} visible={visible}>
<div style={{ width: "100px", height: "100px", backgroundColor: "red" }} />
</AnimatedVisibility>You can replace enterEffect and exitEffect with any desired animation, for example:
const enterEffect = combinedIn([fadeIn(500, 0, Easing.EaseInOut), blurIn()]);
const exitEffect = combinedOut([fadeOut(), blurOut()]);Or:
const enterEffect = scaleIn(500, 0);
const exitEffect = scaleOut(500, 0);const [count, setCount] = useState(1);
const enter = (previousKey: number, targetKey: number) => {
return targetKey > previousKey ? combinedIn([slideInVertically(100), fadeIn()]) : combinedIn([slideInVertically(-100), fadeIn()]);
};
const exit = (previousKey: number, targetKey: number) => {
return targetKey > previousKey ? combinedOut([slideOutVertically(100), fadeOut()]) : combinedOut([slideOutVertically(-100), fadeOut()]);
};
<AnimatedContent enter={enter} exit={exit} currentKey={count}>
<CounterItem />
</AnimatedContent>
<button onClick={() => handleChange(count + 1)}>
increase ↑
</button>
<button onClick={() => handleChange(count - 1)}>
decrease ↓
</button>You can retrieve the key using useContentKey():
function CounterItem() {
const key = useContentKey();
return <h2>{key}</h2>;
}