こんにちは、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で上スクロールで表示、下スクロールで非表示にする方法のご紹介でした!

本記事では固定ナビゲーションを使って解説を進めてきましたが、他の要素でも応用が効きますので、制作中のサイトでスクロール方向によって表示・非表示を切り替えたい場合に取り入れていただければ幸いです。

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。

JavaScriptを基礎からしっかりと学びたい方へ

下記の参考書がおすすめです。私がJavaScript入門時に購入した書籍で、基礎から応用まで多様なサンプルを用いて解説されています。ページ数は多いですが、内容が伴っているのですらすら読めます。腰を据えて学びたい方に最良の一冊となっています。