Owned media

Hisa Web - オウンドメディア

2025年2月14日

jQueryで簡単実装!上スクロール時に表示されるヘッダーの作り方

  • 記事をシェアする:
  • LINEのロゴ

今回は、jQueryで簡単に実装できる、上スクロール時に表示されるヘッダーの作り方をご紹介します。

スクロール時に出たり引っ込んだりするヘッダーメニューに出会ったことがあると思います。

ただ今回は、「下へスクロールしているときは非表示」、「上へスクロールしているときは表示

といった特徴のヘッダーメニューです。

コピペで使用可能です。担当されている案件のデザインに合わせてご使用ください。

デモ:完成のイメージ

まずは、簡単なデモをご覧ください。

クラスの付け外しによって、上スクロール時とページ最上部時のヘッダーのスタイルを変化させています。

ソースコード解説

上記デモに使用したソースコードを、HTML、CSS、jQueryに分けて解説していきます。

HTMLの解説

<header id="header" class="header js-header">
    <div class="header__inner">
        <h1 class="header__logo">
            <a href="#">LOGO</a>
        </h1>
        <nav aria-label="メインナビゲーション">
            <ul>
                <li><a class="header__link" href="#">トップページ</a></li>
                <li><a class="header__link" href="#">サービス</a></li>
                <li><a class="header__link" href="#">お問い合わせ</a></li>
            </ul>
        </nav>
    </div>
</header>
  • <header> js-header クラスをあらかじめ付与し、jQueryで操作します。
  • <nav>aria-label を設定し、アクセシビリティに配慮しています。

CSS(SCSS)の解説

次にCSSです。

ここでは主に、is-fixed(固定時のスタイル)is-hide(下スクロール非表示のスタイル)is-top(ページトップ時のスタイル)を行っています。

body {
    height: 300vh; // スクロールを十分に発生させるための高さ
}
.header {
    position: fixed;
    width: 100%;
    top: 0;
    left: 0;
    padding: 15px;
    background-color: white;
    transition: 0.3s all ease;
    &__inner {
        display: flex;
        justify-content: space-between;
        align-items: center;
        max-width: 1200px;
        margin: 0 auto;
    }
    a {
        text-decoration: none;
        color: inherit;
    }
    nav {
        ul {
            display: flex;
            list-style: none;
            
            li {
                &:nth-child(n + 2) {
                    margin-left: 20px;
                }
            }
        }
    }
    /* 固定時のスタイル */
    &.is-fixed {
        background-color: black;
        color: white;
    }
    /* ヘッダーを非表示(下スクロール時) */
    &.is-hide {
        background: none;
        transform: translateY(-100%);
    }
    /* ヘッダーがトップにあるときのスタイル */
    &.is-top {
        background-color: white;
    }
}
  • position: fixed; によりヘッダーを常に固定
  • .is-fixed でスクロール時の背景色を変更
  • .is-hide で下スクロール時にヘッダーを非表示
  • .is-top でページトップ時のスタイルを適用

デモで操作するとわかりやすいですが、is-fixedに通常時と異なるスタイルを指定することで、上スクロール時とページトップ時の見た目に差をもたせることができます。

また、.headerにis-topと同じ背景を指定することで、背景色のちらつきを予防しています。

jQueryの解説

次は、jQueryです。

ここでは、スクロール量を監視し、各状態に合わせてクラスを付与しています。

$(document).ready(function () {
    const header = $(".js-header");
    const fixedClass = "is-fixed";
    const hideClass = "is-hide";
    const topClass = "is-top";
    let lastScrollY = 0; // 前回のスクロール位置

    $(window).on("load scroll", function () {
        let currentScrollY = $(this).scrollTop();

        // スクロールが0より大きい場合は固定
        if (currentScrollY > 0) {
            header.addClass(fixedClass);
        } else {
            header.removeClass(fixedClass);
        }

        // スクロール方向に応じてヘッダーを表示・非表示
        if (currentScrollY > lastScrollY) {
            header.addClass(hideClass); // 下にスクロール → ヘッダーを隠す
        } else {
            header.removeClass(hideClass); // 上にスクロール → ヘッダーを表示
        }

        // トップにいる場合はトップクラスを付与
        if (currentScrollY === 0) {
            header.addClass(topClass);
        } else {
            header.removeClass(topClass);
        }

        // スクロール位置を更新
        lastScrollY = currentScrollY;
    });    
});
  • currentScrollY > 0 でスクロール時に .is-fixed クラスを追加。
  • currentScrollY > lastScrollY のとき .is-hide を追加し、下スクロール時にヘッダーを隠す。
  • currentScrollY === 0 .is-top を追加し、トップページ時のデザインを適用。
  • lastScrollY を更新し、次回のスクロールイベントで比較できるようにする。

まとめ

今回の記事では、jQueryを使って上スクロール時にヘッダーを表示し、下スクロール時に隠す方法を紹介しました。

ポイントのおさらい

  • position: fixed; でヘッダーを固定
  • is-fixed でスクロール時のスタイルを適用
  • is-hide で下スクロール時に非表示
  • is-top でページトップ時のスタイル適用

今回のコードをカスタマイズして、自分のサイトに合ったデザインに変更してみてください!

最後までお読みいただきありがとうございました。

それでは、また別記事でお会いいたしましょう!

Contact

お問い合わせ・無料相談

サイト制作や運用について、
どのようなご状況でもご相談可能です。

お好きな方法でご連絡ください。
内容を確認次第、1~2営業日以内にご返信いたします。

サービスのモックアップ
Faq

よくある質問

  • はい、WordPressなどのCMSを導入することで、ご自身で簡単に更新できるように制作します。使い方の説明やマニュアルの提供も行っていますので、初めての方でも安心です。

  • もちろん可能です。現在の課題やご要望をお伺いし、最新のデザインや機能を取り入れたリニューアルをご提案いたします。お気軽にご相談ください。

  • はい、すべてのサイトをレスポンシブデザインで制作します。スマートフォンやタブレットなど、あらゆる端末で最適に表示されるよう設計していますのでご安心ください。

  • 制作後も安心して運用いただけるよう、保守・管理サービスをご用意しています。更新作業やセキュリティ対策、定期的なバックアップなどを月額5,000円〜で承ります。もちろん、ご自身で管理されたい場合にもサポートいたします。

  • 料金はサイトのページ数やデザインの複雑さ、追加機能の有無によって異なります。基本的な企業サイトの場合は300,000円〜が目安です。詳細なお見積もりは無料で行っておりますので、お気軽にご相談ください。

  • 通常、ホームページ制作にかかる期間はプロジェクトの規模や内容によりますが、一般的な企業サイトであれば約4〜8週間を目安にしています。具体的なスケジュールはヒアリング後にご提案させていただきます。

Contact

お問い合わせ

  • 無料
    相談・見積
  • 全国オンライン
    対応可能
  • 制作担当者が
    ヒアリング

「サイトが欲しいけど、どうしたらいいかわからない」
といった場合でもご案内可能です。

ご相談、お見積りは無料です。お気軽にご連絡くださいませ。