JavaScriptライブラリを使わずに【scrollReveal】ふわっと表示させる
JavaScriptのIntersectionObserverAPIを使って、ライブラリを使わずにscrollRevealのようなふわっと表示させる方法を紹介します。
IntersectionObserverAPIでふわっと表示させる
どこでも使えますが、今回はセクションとしましょう。
CSS
JavaScript
ターゲットの選択
まず、querySelectorAll()でスクロールで表示させたい要素をすべて選択します。
hiddenをつけてすべて非表示にする
そして、forEachでそれぞれにhiddenのクラスをつけて、すべてをいったん非表示にします。
HTMLに手動でhiddenをつけるとJavaScriptをオフにしているブラウザではコンテンツが表示されなくなってしまうのでJavaScriptでhiddenにします。
IntersectionObserverを設定する
そして、スクロールすると、それぞれのところで表示できるようにIntersectionObserverを設定します。
IntersectionObserverのオプション部分ではroot: nullとすることでビューポートでターゲットを観測できます。
thresholdは微調整をしながら、確認していきます。今回は10%とします。
コールバック関数を設定する
そして、IntersectionObserverで呼び出すコールバック関数を設定します。
コールバック関数の引数の名前はentries, observerでなくてもいいのですが、これらの名前で使われることが多いです。
entriesの中身は、thresholdでひとつしかありませんが、配列になっているので、分割代入でentryに格納します。
スクロールして出力されるIntersectionObserverEntryのtargetを確認するとsection1などが表示されることが確認できます。
つまり、entry.targetが各sectionを表しています。
表示にする条件を設定する
sectionが交差しなければreturnして処理を終わらせ、交差したらhiddenを取り除きます。
sectionが交差したらhiddenを取り除くとする下のif文でも動きます。
unobserve()で観測を止める
スクロールをするたびにobserveされますが、一度表れたら不要になるのでobserveを止めます。
unobserve()で止められます。()には、targetとなる要素、今回の場合はsection(つまりentry.target)をいれます。