ミギムキ

[jQuery] ヘッダーナビゲーションを下スクロールで隠して上スクロールで再表示させたい

ページをスクロールした際のヘッダーナビゲーションの固定方法として、下スクロールしたときには非表示にし、上スクロールしたときに再表示するという方法があります。

下スクロールしているときはコンテンツの表示を優先し、上スクロールしたときにはページの回遊を促すという形になり、上スクロール時に動的にナビゲーションが表示されるため、ナビゲーションへの視線誘導もされやすい効果が見込めます。

本記事では、上下のスクロールによってヘッダーナビゲーションの表示を制御するサンプルコードをご紹介します。

サンプルコード

html

<header class="header"> </header>

CSS

.header { position: fixed; top: 0px; left: 0px; z-index: 1; width: 100%; height: 100px; background-color: #3388dd; transition: transform 0.5s; } .header.js_hide { transform: translateY(-100%); }

ヘッダーは「position: fixed;」で固定表示し、「js_hide」クラスが有効になったときにヘッダーの高さ分上方向にずらすことで画面外に隠します。

jQuery

const header = $('.header'); const headerHeight = header.outerHeight(); let beforeScrollTop = 0; $(window).scroll(function () { const scrollTop = $(this).scrollTop(); if((scrollTop > beforeScrollTop) && (scrollTop > headerHeight)) { header.addClass('js_hide'); } else { header.removeClass('js_hide'); } beforeScrollTop = scrollTop; });

スクロールが発生するたびにスクロール位置を取得し、ヘッダーを隠すか表示するかチェックを行い、スクロール位置を保持しておきます。

スクロール位置が前回のスクロール位置とヘッダーの高さ双方よりも大きければヘッダーを隠し、それ以外ではヘッダーを表示します。

ご質問など受け付けています

記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。

ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。