owned mediaウェブ制作に役立つコンテンツを発信中!

jQueryでスクロールに対応する動きがついた固定ヘッダーを実装する

最終更新日: Update!!
スクロールで画面上部に固定されるヘッダーを実装するときに、スクロール量やスクロールの方向に合わせて動きを変化させたいときに使える方法です。ファーストビューではヘッダーを表示させたくないけど、スクロール時は固定で表示させるようなデザインでよく見かけますね。   具体的には、jQueryでスクロール量を取得しながらCSS側でヘッダーの位置を調整する形になります。ここでは、ページをスクロールさせると上からヘッダーが画面上部に固定表示されて、上方向にスクロールさせるとそのまま上方向に画面外へと収まり非表示になり、下方向にスクロールすると再度表示されるという仕様です。それでは実際のコードを見ていきます。 【HTML】※一部省略
<header id="fixed-header">
  <!-- 固定ヘッダーエリア -->
  <nav>
    <span>MENU 1</span>
    <span>MENU 2</span>
    <span>MENU 3</span>
    <span>MENU 4</span>
  </nav>
</header>
<main>
  <div id="inner-header">
    <!-- セクション内ヘッダーエリア -->
    <nav>
      <span>MENU 1</span>
      <span>MENU 2</span>
      <span>MENU 3</span>
      <span>MENU 4</span>
    </nav>
  </div>
</main>
  【CSS】※一部省略
#fixed-header {
  background: #fff;
  box-shadow: 0 2px 10px 0 rgba(0,0,0,.30);
  width: 100%;
  height: 80px;
  position: fixed;
  top: 0;
  left: 0;
  transition: all 0.3s ease 0s;
  transform: translateY(-80px);
  z-index: 100;
}
  【javascript】
$(function(){
  var startPos = 0;
  var headerElem = $('#fixed-header');
  var threshold = 200;
  $(window).on('scroll',function(){
    var currentPos = $(this).scrollTop();
    if(currentPos > startPos) {
      if($(window).scrollTop() >= threshold) {
        headerElem.css({
          'transform': 'translateY(0)'
        });
      }
    } else {
      headerElem.css({
        'transform': 'translateY(-80px)'
      });
    }
    startPos = currentPos;
  });
});
  HTMLはシンプルにヘッダー部分だけ用意すればOKです。まずはCSSでpositionを固定にして、transformでヘッダーの高さ分上方向に移動させ、ヘッダーが画面内に表示されないようにしておきます。このときに、transitionを設定しておくと動きにアニメーションをつけることができます。   そして、JavaScriptでスクロールに合わせてヘッダー部分の動きの制御をかけていきます。閾値を示す変数にはページトップからどれくらいスクロールするとヘッダーが表示されるかというのを指定します。あとはスクロールイベントでヘッダーの位置を調整する部分を実行していくだけです。これだけでスクロールに対応した動きをする固定ヘッダーが実装できます。今回のサンプルはこちらに用意しましたのでよかったらご参考に。  

See the Pen sticky-header by designsupply (@designsupply) on CodePen.

  上記ではヘッダーの高さを絶対値指定していますが、高さを指定しない場合は、jQueryでヘッダーの高さを取得して、適宜変数に格納して調整する形になるかと思います。
  • はてなブックマーク
  • Pocket
  • Linkedin
  • Feedly

この記事を書いた人

Twitter

sponserd

    keyword search

    recent posts

    • Twitter
    • Github
    contact usscroll to top
      • Facebook
      • Twitter
      • Github
      • Instagram