作成日 2021/09/19 16:13
ReactでModalにふわっとしたアニメーションをつける
ReactはVueと比べると最初からtransition componentが実装されているわけではない。これはメリットでもあるのだが、後からライブラリを入れて実装するか自作する事になる。
たかがふわっとするアニメーションは生のCSSで簡単に実装出来たのだが、JavaScriptを用いると僕の理解している範囲を少し超えていたので備忘録として残すことにする。
上記の点を踏まえて、実装を行う。
※今回はStyled componentのみで実装を行う場合です、
2つの表示・非表示を扱うstateを管理する必要がある。
必要でなければDOMを表示したくないので、2つの状態を持つことでアニメーションを描画出来るようにする。
const animationOpen = keyframes`
0% {
opacity: 0;
}
100% {
opacity: 1;
}
`
const animationClose = keyframes`
0% {
opacity: 1;
}
100% {
opacity: 0;
}
`
const ModalAnimation = styled.div<{ open: boolean }>`
animation: ${({ open }) => (open ? animationOpen : animationClose)} 200ms
ease-in;
`
Animationのstyleが当たっているComponentを用意する。openの状態で終わりと始まりを判別する。
初見だったのだが、JavaScriptにはAnimationを待ってから処理する関数が存在する。
onAnimationEnd={() => {
if (!open) setDisplay(false)
}}
上記のものをComponentに割り当ててあげる。アニメーションの処理が終わると発火するようになる。
よくやりがちなミスとして、開くときだけアニメーションが行われて、閉じるときにアニメーションが行われないというようなものがある。一見開発中にあたふたしてしまうので、終了後もきちんとアニメーションが付けられるようにスムーズに開発をしたい。