はじめに
こんにちは、北陸のwebコーダーdaimaです。
本日は、画面のスクロールに応じて
要素に処理を施す
jQueryの処理をご紹介します。
コード
HTMLコード
<div class="go_scroll">SCROLL↓</div> <div class="section"> <div class="message js_scrlTarget"><!--この「.js_scrlTarget」が処理の目印になります--> <div class="message-image"> <img src="https://spreadsheep.net/wp-content/uploads/2018/03/img05.jpg"> </div> <div class="message-text">これは犬です。</div> </div> </div> <div class="section"> <div class="message js_scrlTarget"> <div class="message-image"> <img src="https://spreadsheep.net/wp-content/uploads/2018/03/img05.jpg"> </div> <div class="message-text">これも犬です。</div> </div> </div> <div class="section"> <div class="message js_scrlTarget"> <div class="message-image"> <img src="https://spreadsheep.net/wp-content/uploads/2018/03/img05.jpg"> </div> <div class="message-text">またもや犬です。</div> </div> </div> <div class="section"> <div class="message js_scrlTarget"> <div class="message-image"> <img src="https://spreadsheep.net/wp-content/uploads/2018/03/img04.jpg"> </div> <div class="message-text">犬・・・ではなく猫です。</div> </div> </div>
ポイントは各ブロックに付与された
「js_scrlTarget」クラス。
処理を与えたい要素に
それぞれこのクラスを付与しておきます。
CSSコード
img{ max-width: 100%; } .section{ height: auto; margin-bottom: 40px; } .message{ width: 90%; margin: 0 auto; border: 1px dashed #333; padding: 2em; box-sizing: border-box; margin-top: 60px; display: flex; } .go_scroll{ padding: 10px 0; background-color: #666; color: #fff; text-align: center; letter-spacing: 0.2em; } .message-image,message-text{ width: 50%; } .message-text{ pbox-sizing: border-box; padding-left: 40px; } .js_scrlTarget{ position: relative; bottom: -20px; transition: all 200ms ease-out; opacity: 0; } .js_scrlTarget.js_scrlTargetFire{ opacity: 1; bottom: 0; }
CSS。
この中で処理直接に関係するのは
.js_scrlTargetと
.js_scrlTarget.js_scrlTargetFireのみ。
CSSの記述をカスタマイズすれば
今回デモで行った処理以外にも、
画面外から要素が突き出るような見せ方や
要素が拡大して出現するような見せ方も可能です。
javascriptコード
//スクロール発火処理 function scrollEffect(){ $(".js_scrlTarget").each(function(){ var scroll = $(window).scrollTop();//現在のyスクロール量を取得 var windowHeight = $(window).height();//ウィンドウの高さを取得 var tgtPos = $(this).offset().top//ターゲットのy位置を取得 var subjectHeight = $(this).innerHeight();//ターゲットの高さを取得 var threshould;//閾値 var w = $(window).width(); threshould = tgtPos - windowHeight + 200;//発火位置調整 // if (scroll > threshould) {//クラスを付与する処理 $(this).addClass("js_scrlTargetFire"); } }); } $(window).scroll(function(){ scrollEffect(); });
今回の肝となるスクリプト記述。
発火タイミングの微調整は10行目の
数値を弄ることで可能です。
おわりに
上手く取り入れることで
サイトに一気に今風な雰囲気が出せる
このスクロール発火処理。
ぜひとも活用してみてください!
コメント
一旦表示させた要素をページのトップに戻ったら削除して
またスクロールしたら表示するようにしたいのですが
ご教授いただければ幸いです。
ご訪問ありがとうございます!
ご要望に添えるかは分かりませんが
例えば記事内スクリプトのクラス付与の個所を
if (scroll > threshould) {
$(this).addClass("js_scrlTargetFire");
} else {
$(this).removeClass("js_scrlTargetFire");
}
このように書き換えていただければ
スクロール量が各要素のy位置未満の時にクラスが解除されるようになるので
再度スクロールアクションを発火できるようになりますよ。