ページスクロールをして、特定の要素がウインドウ内で表示されたタイミングを検知してアニメーションをさせたり、classをつけるといった要望はよくありますね。
以前はjquery.inviewを使っていたのですが、jQueryに依存(1系に)してることもあって、使えるシーンがすくなっていました。
そこで、jQueryに依存しないライブラリで、画面内の要素検知ができるものがあったので紹介します。
in-view
in-view.jsはすべてのモダンブラウザとIE9+をサポートしており、現環境ほとんどで利用できます。
in-viewのinstall
npmでinstallする方法とダウンロードしたものを読み込む2パターンがあります。
npm install --save in-view
公式サイトには書いてなかったのですが、CDN版もありました。
<script src="https://cdn.jsdelivr.net/npm/in-view@0.6.1/dist/in-view.min.js"></script>
使い方
使い方はシンプルで対象となる要素を指定し、ビューポートに入った時(enter)と出る時(exit)にエフェクトを記述します。
inView('.someSelector')
.on('enter', doSomething)
.on('exit', el => {
el.style.opacity = 0.5;
});
一度しか適応したくない場合は.on
ではなく.once
を使います。
inView('.someSelector').once('enter', doSomething);
画面内にいるかどうかの判定もできますのでif文でなにかするとかも可能です。
inView.is(document.querySelector('.someSelector'));// => true
どのくらい入り込んでると、画面内に入ったかをチェックもできます。
inView.offset(100);
inView.offset(-50);