【jQuery】上スクロールで表示、下スクロールで非表示にする処理
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
上スクロールで表示されて、下スクロールで非表示になる処理の実装方法の紹介になります。
固定ナビゲーションや、スマホ表示時に画面下に表示されるメニュー等で利用されています。ページを下にスクロールするユーザーの多くはコンテンツに集中していますので、固定表示を非表示にして画面領域を広げる手法は、ユーザーに寄り添った良い方法だと思います。
具体的には下記のような表示となります。
See the Pen Upper Lower Scroll | jQuery + CSS by ryoy (@intotheprogram) on CodePen.
上記は、下にスクロールするとナビゲーションが非表示に、上にスクロールするとナビゲーションが表示される処理となります。
本記事では、上記デモの実装方法をご紹介しています。
本記事の内容
- 上スクロールで表示、下スクロールで非表示にする方法
- 表示・非表示の切り替えをアニメーションにする
- 一定量スクロールしてから非表示にする
では解説していきます。
上スクロールで表示、下スクロールで非表示にする処理
スクロール方向によって表示・非表示を切り替える場合は、下記のような処理の流れになるかと思います。
- ユーザーのスクロール位置を取得する
- スクロール方向を取得する
- 上・下スクロールを判断して処理する
上記の処理の流れをスクリプトにしてみます。
$(function(){ //変数初期化 var pos = 0; //スクロールが発生した際に実行 $(window).on('scroll', function(){ //ユーザーのスクロール位置取得 & スクロール方向で分岐 if($(this).scrollTop() < pos ){ //上スクロール時の処理を記述 }else{ //下スクロール時の処理を記述 } //スクロールが停止した位置を保持 pos = $(this).scrollTop(); }); });
$(this).scrollTop()で現在のスクロール位置を取得、変数のposは停止したスクロール位置を保持しています。ifでスクロール位置と保持中のスクロール位置を比較し、スクロール方向を判断しています。
これで、スクロール方向によって別の処理ができるようになりました。続いて要素の表示・非表示の切り替えをアニメーションにしてみましょう。
アニメーションで表示・非表示が切り替える
アニメーションする方法は色々ありますが、本記事ではjQueryのslideDown、slideUpを使った方法と、CSSで定義したclassを付け外ししてアニメーションする方法をご紹介したいと思います。
例として、表示・非表示する要素はheaderとしています。
jQuery
$(function(){ var pos = 0; var header = $('header'); $(window).on('scroll', function(){ if($(this).scrollTop() < pos ){ //上スクロール時ヘッダー表示 header.slideDown(); }else{ //下スクロール時ヘッダー非表示 header.slideUp(); } pos = $(this).scrollTop(); }); });
See the Pen PymZdw by ryoy (@intotheprogram) on CodePen.
CSS + jQuery
.hideClass { transform: translateY(-60px); }
$(function(){ var pos = 0; var header = $('header'); var hideClass = 'hideClass'; $(window).on('scroll', function(){ if($(this).scrollTop() < pos ){ //上スクロール時ヘッダーのhideClassを削除 header.removeClass(hideClass); }else{ //下スクロール時ヘッダーにhideClassを追加 header.addClass(hideClass); } pos = $(this).scrollTop(); }); });
See the Pen Upper Lower Scroll | jQuery + CSS by ryoy (@intotheprogram) on CodePen.
CSSではtransitionやtransformを用いて様々なアニメーションをさせることができます。また、Animate.cssと組み合わせると表現の幅が広がりますので、色々と試していただければと思います。
一定量スクロールしてから非表示にする
最後に、一定量スクロールしてから非表示になるようにスクリプトを修正します。
例えば、キービジュアルを過ぎた後に非表示になるようにしたい!といった場面でお役に立つかと思います。
$(function(){ var pos = 0; $(window).on('scroll', function(){ // if($(this).scrollTop() < pos || $(this).scrollTop() < 500){ //上スクロール時の処理を記述 }else{ //下スクロール時の処理を記述 } //スクロールが停止した位置を保持 pos = $(this).scrollTop(); }); });
See the Pen Upper Lower Scroll | jQuery + CSS 2 by ryoy (@intotheprogram) on CodePen.
まとめ
以上、jQueryで上スクロールで表示、下スクロールで非表示にする方法のご紹介でした!
本記事では固定ナビゲーションを使って解説を進めてきましたが、他の要素でも応用が効きますので、制作中のサイトでスクロール方向によって表示・非表示を切り替えたい場合に取り入れていただければ幸いです。
JavaScriptを基礎からしっかりと学びたい方へ
下記の参考書がおすすめです。私がJavaScript入門時に購入した書籍で、基礎から応用まで多様なサンプルを用いて解説されています。ページ数は多いですが、内容が伴っているのですらすら読めます。腰を据えて学びたい方に最良の一冊となっています。