PR
【Gatsby製ブログ】framer-motionでVariantsを使う!
Reactでアニメーションをつけるときにオススメのライブラリーがframer-motionです。
もちろんReactベースのGatsbyでも使うことができます。
私のGatsbyブログでもframer-motionでアニメーションをつけています。
framer-motionは自由度が高く、色々できる代わりに使い方が結構複雑です。
今回はframer-motionの基本Variantsについて説明していきます!
Variantsとは?
こちらのframer-motionの基本で説明したときには、初期状態(initial)とアニメーション先の状態(animate)はオブジェクトの形で指定していました。
Variantsはこんな形であらかじめ状態を設定しておきます。
const variants = { // こんな形でVariantsを設定。名前はなんでもOK。
visible: { // 状態を設定。名前はなんでもOK。visible(見える状態)は名前としてよく使う。
opacity: 1, // 透過率。0〜1の間の値。0で完全に透明、1で完全に見える状態。
transition: {
duration: 2 // 2秒かけて変化。
}
},
hidden: { // 状態を設定。名前はなんでもOK。hidden(隠れている状態)は名前としてよく使う。
opacity: 0,
},
}
return (
…
<motion.div
variants = {variants} //variantsで先ほど設定したVariantsを指定。
initial = "hidden" //初期状態を名前で指定。
animate = "visible" //アニメーション先を名前で指定。
>
クマが現れた!!
</motion.div>
…
)
基本的な流れは、
- Variantsの設定。状態の名前と、そのときの状態を書いておく。
- motionタグで、variantsに先ほどのVariants、initialとanimateに状態の名前を指定。
これでVariantsでのアニメーション設定ができます。Variantsの利点としては、
- アニメーションの状態管理が楽になる。
- 複数の状態を指定できる。
などがありますので、基本的にVariantsでアニメーション設定をしていきます。
例えば、こんな感じで色を変えることもできます。
const changeColorVariants = {
red: {
color: "white",
backgroundColor: "#ff0000",
},
blue: {
color: "white",
backgroundColor: "#0080ff",
transition: {
duration: 2,
}
},
}
return (
…
<motion.div
variants = {changeColorVariants}
initial = "red"
animate = "blue"
style={{fontSize:"3rem", width: 600, height: 200, textAlign: "center", lineHeight: "200px" }}
>
Variantsのテストだよ
</motion.div>
…
)
framer-motion、なんでもできるな!すげぇよ!
Variantsの応用編
Variantsで状態を3つ用意しておいて、ラジオボタンで選んだ色に変化していく、なんてのもできます。
このコードの中にあるuseStateの使い方もクセがあるので、ぜひこちらの記事もあわせてご覧ください。
const [color, setColor] = useState("red"); //useStateを使って状態の名前を変化させる。
const colorChange = (e) => {setColor(e.target.value)}
//↑ラジオボタンから状態の名前を引っ張ってきて、setColorで状態の名前を変化させる。
const changeColorVariants = { //状態を3つ(red、blue、green)Variantsで準備しておく。
red: {
color: "white",
backgroundColor: "#ff0000",
transition: {
duration: 2,
}
},
blue: {
color: "white",
backgroundColor: "#0080ff",
transition: {
duration: 2,
}
},
green: {
color: "white",
backgroundColor: "#00fa9a",
transition: {
duration: 2,
}
}
}
return (
…
<motion.div
variants = {changeColorVariants}
initial = "red"
animate = {color} //ここに"red"か"blue"か"green"が入る。それに向かってアニメーションが進む。
style={{fontSize:"3rem", width: 600, height: 200, textAlign: "center", lineHeight: "200px" }}
>
Variantsのテストだよ
</motion.div>
<input type = "radio" name ="colorselect" value = "red" onChange = {colorChange} checked = {color === "red"}/><label>赤</label>
<input type = "radio" name ="colorselect" value = "blue" onChange = {colorChange} checked = {color === "blue"}/><label>青</label>
<input type = "radio" name ="colorselect" value = "green" onChange = {colorChange} checked = {color === "green"}/><label>緑</label>
…
)
んー…Variants、便利!
まとめ
framer-motionを使う際に必須ともいえるVariantsについて説明しました。
アニメーションの状態を直書きすることは滅多にありません。
Variantsを使った方が使い回しがきいたり、管理がしやすいというのが最大の利点です。また、3つ以上の状態を管理する際にも使います。
基本的にVariantsを使ってアニメーションの設定をするので、しっかりと基礎を押さえましょう!
Gatsbyを学習している方への私からのオススメ!
私が読んでよかったな、と思うGatsbyの学習をするのにオススメの本を紹介しておきます。
画も多くてとても読みやすく、ステップバイステップでGatsbyJSのサイトを作ることができます!
また、Gatsbyを学習する上で、Reactを同時に学習することもオススメします。
こちらも、まず構成や見た目がとても読みやすい本です。加えてReactに対しての専門的な知識を丁寧に学ぶことができます。ここでReactに対する基礎知識をしっかりしておくと、Gatsbyに対する見方が変わって、Webページをサクサク作ることができるようになります!
あと、色々と調べたのですが、Reactの学習ならUdemyもオススメです。必要な知識を1動画単位で購入できるので、学習に無駄がないです。Reactってあんまり学習できるプログラミングスクールみたいなのがないんですよね…。「React」と検索するだけで大量に動画がでてきます!