Web制作に関することをブログにしました。誰かのお役に立てれば幸いです。
画面がスクロールされたことを検知して、トップに戻るボタンが現れたり、
トップバーの背景色が変わったりなど、スクロールイベントに合わせてCSSを切り替える方法を紹介します。
今回の実装では、useState
とuseEffect
を使います。
以前のブログでuseState
については、まとめてあるので、
今回は、useEffect
について、まとめておきたいと思います。
useEffect(() => {
// 第一引数 ①実行したい関数
return () => {
// クリーンナップ処理を記述する。
};
},[]); // 第二引数 ②関数の実行を制御する変数
useEffect
はサイトがレンダリングされたタイミングで第一引数の処理を実行するHookです。
処理が実行されるタイミングは、第二引数によってコントロールすることができます。
・第二引数を記述しない ⇨ レンダリングするたびに処理を実行
・第二引数を[]
⇨ 初回レンダリング時のみ処理を実行
・第二引数を[state]
⇨ stateの更新が起こるたびに処理を実行
となります。 クリーンナップ処理は、必要な場合のみ記述するもので省略可能です。
画面を下にスクロールしたときに、CSSが切り替わる様にします。
import { useEffect, useState } from 'react'
import s from "./Test.module.css";
const [isVisible, setIsVisible] = useState(false)
const toggleVisibility = () => {
window.scrollY > 500
? setIsVisible(true)
: setIsVisible(false)
}
useEffect(() => {
window.addEventListener('scroll', toggleVisibility)
return () => window.removeEventListener('scroll', toggleVisibility)
}, [])
<div
className={isVisible ? s.test_visible : s.test}
>
〜〜〜
上の処理で、スクロールされたことを検知しているのは、
window.addEventListener('scroll', toggleVisibility)
の部分です。
addEventListener
には、クリーンナップ処理が必要なので、その処理が書かれています。
スクロールされたことを検知し、toggleVisibility
の関数を実行、
条件に合えば、isVisible
が、true
に更新されます。
あとは、isVisible
によってクラス名を切り替えてやれば、CSSが変わることになります。
https://zenn.dev/web_tips/articles/795b2a85fd2d97
https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener
可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More可茂IT塾ではFlutterインターンを募集しています!可茂IT塾のエンジニアの判断で、一定以上のスキルをを習得した方には有給でのインターンも受け入れています。
Read More