Package Exports
- react-mount-animation
- react-mount-animation/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (react-mount-animation) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Easy React mount/unmount animations with react-mount-animation 🏃🏽♀️🚀
Add animations as you would from CSS (using keyframes) when mounting and unmounting React components with a very clear and easy syntax. The 'react-mount-animation' component takes care of mounting and unmounting the component through the 'show' attribute and executing the animations.
Simple Example
Instead of this (mount/unmount without animation):
const MyComponent = () => {
const [isMounted, setIsMounted] = useState(false);
...
return (
<>
{isMounted && (
<div>
Hi World!
</div>
)}
</>
)
...
We do this (same with animation):
import Animated from "react-mount-animation";
const MyComponent = () => {
const [isMounted, setIsMounted] = useState(false);
...
return (
<Animated.div //You can use any HTML element here
show={isMounted}
mountAnim={`
0% {opacity: 0}
100% {opacity: 1}
`}
>
Hi World!
</Animated.div>
)
...
Composite Example
import Animated from "react-mount-animation";
const mountAnimation1 = `
0% {border-radius: 4px}
0% {opacity: 0}
0% {font-size: 12px}
10% {opacity: 0}
35% {font-size: 12px}
60% {font-size: 24px}
70% {border-radius: 4px}
70% {box-shadow: 0px 0px 0px 0px rgba(0,0,0,0), inset 0px 0px 2px 2px rgba(255,255,255,0)}
100% {opacity: 1}
100% {box-shadow: 0px 0px 13px 4px rgba(0,0,0,1), inset 0px 0px 2px 2px rgba(255,255,255,0.2)}
`
const unmountAnimation1 = `
0% { opacity: 1; }
10% { transform: rotate(-20deg); }
100% {opacity: 0;}
`
const mountAnimation2 = `
60% {transform: translate(0px, 0)}
85% {transform: translate(10px, 0)}
`
const MyComponent = () => {
const [isMounted, setIsMounted] = useState(false);
...
return (
<>
<button onClick={() => setIsMounted(!isMounted)}>
Mount/Unmount
</button>
<Animated.div
show={isMounted}
mountAnim={mountAnimation1}
unmountAnim={unmountAnimation1}
style={{
fontSize: 24,
color: "white",
backgroundColor: "black",
padding: 20,
borderRadius: 20,
boxShadow:
"0px 0px 13px 4px rgba(0,0,0,1), inset 0px 0px 2px 2px rgba(255,255,255,0.2)",
}}
>
<Animated.div
show={isMounted}
mountAnim={mountAnimation2}
time={1.1}
>
Hi! This is a test component 😝
</Animated.div>
</Animated.div>
</>
)
...
Props
name | type | description |
---|---|---|
show* | boolean | Used to indicate when the component has to be mounted and unmounted. |
time | number | The total duration of the mount animation. Default 1. |
unmountTime | number | The total duration of the unmount animation. By default it takes the time prop. |
delay | number | The total delay of the mount animation. Default 0. |
unmountDelay | number | The total delay of the unmount animation. By default it takes the delay prop. |
mountAnim* | string | Mount animation indicated as string just like CSS keyframes. |
unmountAnim | string | Unmount animation indicated as string just like CSS keyframes. If this prop is not filled, the component will execute the mountAnim reversed when unmount. |
mountAnimId | string | If you don't want to use mountAnim, you can specify the name of a keyframe defined in a CSS file. This will override mountAnim. |
unmountAnimId | string | If you don't want to use unmountAnim, you can specify the name of a keyframe defined in a CSS file. This will override unmountAnim. |
onAnimationEnd | function | Callback fired when the component ends its animation (mount or unmount). |
onMountEnd | function | Callback fired when the component ends its mount animation |
onUnmountEnd | function | Callback fired when the component ends its unmount animation |
You are invited to collaborate 😋, if you are interested, you can contact me through migueljimenezbenajes@gmail.com.