【jQuery】スクロール量によるイベント発火

javascript

※ 当サイトではアフィリエイト広告を利用しています。

こんにちは、meiです。
今回はjsを使ってスクロール量に応じてイベントを起こす処理についてまとめていきます。
スクロール量によるイベントには下図の4点の値が必要になります。

①スクロール量 $(window).scrollTop();で取得
②画面の高さ $(window).height();で取得
③対象要素(クラス名:element)のY座標の位置 $(‘.element’)offset().top;で取得
④対象要素(クラス名:element)の高さ $(‘.element’).outerHeight();

A地点(画面下部)に対象要素の上部が重なったときに発火させる場合

let winH = $(window).height();
let elmTop = $('.element').offset().top;

$(window).on('scroll', function(){
 let scroll = $(window).scrollTop();
 if(scroll >= elmTop - winH){
 //ここにイベントを書く
 } 
});

B地点(画面中央)に対象要素の上部が重なった時に発火させる場合

画面の高さを2分し中央値を出します。

let winH = $(window).height();
let elmTop = $('.element').offset().top;

$(window).on('scroll', function(){
 let scroll = $(window).scrollTop();
 if(scroll >= elmTop - winH/2){
 //ここにイベントを書く
 } 
});

C地点(画面上部)に対象要素の上部が重なった時に発火させる場合

let elmTop = $('.element').offset().top;

$(window).on('scroll', function(){
 let scroll = $(window).scrollTop();
 if(scroll >= elmTop){
 //ここにイベントを書く
 } 
});

対象要素の中央、または下部が重なった時に発火させる場合

上図の④、対象要素(クラス名:element)の高さの取得が必要になります。
例えばB地点に対象要素の中央が重なった時に発火させる場合は以下のコードになります。

let winH = $(window).height();
let elmTop = $('.element').offset().top;
let elm = $('.element').outerHeight();
let elmCenter = elmTop + elm/2

$(window).on('scroll', function(){
 let scroll = $(window).scrollTop();
 if(scroll >= elmCenter - winH/2){
 //ここにイベントを書く
 } 
});

$(‘.element’).outerHeight();で対象要素の高さを取得後、要素のY座標に要素高さの二分した値を足した値を用います。

対象要素の下部でイベント発火させる場合は以下です。

let winH = $(window).height();
let elmTop = $('.element').offset().top;
let elm = $('.element').outerHeight();
let elmBtm = elmTop + elm

$(window).on('scroll', function(){
 let scroll = $(window).scrollTop();
 if(scroll >= elmBtm  - winH/2){
 //ここにイベントを書く
 } 
});

まとめ

スクロール量に応じたイベント、よく使いますよね。画面のここらへんでフェードインする、とかアニメーション開始する、などなど。どんどん使って面白いサイトを作っていきましょう!

タイトルとURLをコピーしました