jQuery Web制作

最初のセクションを過ぎたら上に消えて上にスクロールすると表示されるヘッダーの作り方

2024年3月1日

※ 当サイトではアフィリエイト広告を利用しています

最初のセクションを過ぎたら上に消えて、上にスクロールしたら表示されるヘッダーってどうやるの?

今回実装したいのは、こちらになります。

  • 最初に表示されているヘッダーは固定されている
  • スクロールすると最初のセクションを通過するまではヘッダーは固定されたまま
  • 最初のセクションを通過したらヘッダーは上にスライドして消える
  • 上にスクロールするとヘッダーは上からスライドして表示される

それでは、解説していきます。

じゅんぺいブログは、Web制作コーディングWordPress制作)の技術記事を中心に、約500記事公開しています。ぜひ他の記事も参考にしてみてください!
完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適です。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇
(有料になっていたらすいません🙇‍♂️)

\ 完全無料 /

ZeroPlus Gate公式サイト

毎日先着制!

最初のセクションを過ぎたら上に消えて上にスクロールすると表示されるヘッダーの作り方

今回はjQueryを使うので、jQueryを使ったことがない人は、まずは以下の記事を参照下さい。

【初心者向け】jQueryとは?CDNを使った本体の読み込み方についても分かりやすく解説
【初心者向け】jQueryとは?CDNを使った本体の読み込み方も分かりやすく解説

続きを見る

早速コードを解説していきます。

 

HTML

<header class="header">
  <nav class="header-nav">
    <ul class="header-list">
      <li class="header-item"><a href="#anchor01">HOME</a></li>
      <li class="header-item"><a href="#anchor02">ABOUT</a></li>
      <li class="header-item"><a href="#anchor03">SHOP</a></li>
      <li class="header-item"><a href="#anchor04">NEWS</a></li>
    </ul>
  </nav>
</header>
<!-- メインコンテンツ -->
<main>
  <section class="section01" id="anchor01">
    <h2 class="section-title">HOME</h2>
  </section>
  〜中略〜
</main>

今回は『最初のsectionタグを過ぎたら』がトリガーになるので、メインコンテンツではsectionタグを使います。

 

CSS

/* スムーズスクロールとヘッダーのスタイル */
html {
  scroll-behavior: smooth; /* スムーズスクロールを有効化 */
}
/* ヘッダー部分のスタイル */
.header {
  background-color: #ff9393; /* 背景色 */
  color: #fff; /* テキスト色 */
  position: fixed; /* 固定 */
  top: 0; /* 上からの位置 */
  transition: top .5s; /* アニメーション効果を追加 */
  width: 100%; /* 幅を100%に */
}
/* ヘッダーリストのスタイル */
.header-list {
  align-items: center; /* 垂直方向中央揃え */
  display: flex; /* 横並びに配置 */
  height: 70px; /* ヘッダーの高さ */
  justify-content: center; /* 左右中央寄せ */
}
/* ヘッダーアイテムのスタイル */
.header-item a {
  color: #fff; /* テキスト色 */
  padding: 10px; /* 内側の余白 */
  text-decoration: none; /* デフォルトの下線を消す */
}

CSSので重要なのはこちらです。

/* ヘッダー部分のスタイル */
.header {
  position: fixed; /* 固定 */
  top: 0; /* 上からの位置 */
  transition: top .5s; /* アニメーション効果を追加 */
}

ヘッダーは常に固定した状態です。

あとは上からスルッとスライドするように、transition: top .5s;でアニメーションにしています。

 

jQuery

$(document).ready(function () {
  // ウィンドウのスクロール量を保持する変数
  let start_position = 0,
    window_position;
  // ヘッダー要素を取得
  const header = $("header");
  // 最初のsection要素の高さを取得
  const firstSectionHeight = $("section").outerHeight();
  // スクロールイベントを設定
  $(window).scroll(function () {
    // 現在のウィンドウのスクロール量を取得
    window_position = $(window).scrollTop();
    // ヘッダーの高さを取得
    const headerHeight = header.outerHeight();
    // 最初のsection要素を過ぎるまではヘッダーを表示
    if (window_position <= firstSectionHeight) {
      header.css("top", "0");
    } else {
      // 最初のsection要素を過ぎたらヘッダーを上に移動
      header.css("top", -headerHeight + "px");
    }
    // 現在の位置を更新
    start_position = window_position;
  });
  // ページ読み込み時に中途半端な位置でロードされたときでも正しくヘッダーの表示を設定するためにスクロールイベントを発生させる
  $(window).trigger("scroll");
});

セクションとヘッダーの高さは自動で取得するので、ここで数値を入れる必要はありません。

 

デモ

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

最初のセクションであるHOMEを過ぎて、2番目のセクションのABOUTのトップがヘッダーのトップを過ぎたら、ヘッダーが上に消えます。

そして上にスクロールすると、ヘッダーは表示されます。

 

JavaScriptの場合

今回はjQueryを使う方法を解説しましたが、JavaScriptでも出来ます。

先ほどのjQueryをこちらに変えます。

// ウィンドウのスクロール量を保持する変数
let start_position = 0;
let window_position;
// ヘッダー要素を取得
const header = document.querySelector("header");
// 最初のsection要素の高さを取得
const firstSection = document.querySelector("section");
const firstSectionHeight = firstSection ? firstSection.offsetHeight : 0;
// スクロールイベントを設定
window.addEventListener("scroll", function () {
  // 現在のウィンドウのスクロール量を取得
  window_position = window.scrollY;
  // ヘッダーの高さを取得
  const headerHeight = header.offsetHeight;
  // 最初のsection要素を過ぎるまではヘッダーを表示
  if (window_position <= firstSectionHeight) {
    header.style.top = "0";
  } else {
    // 最初のsection要素を過ぎたらヘッダーを上に移動
    header.style.top = -headerHeight + "px";
  }
  // 現在の位置を更新
  start_position = window_position;
});
// ページ読み込み時に中途半端な位置でロードされたときでも正しくヘッダーの表示を設定するためにスクロールイベントを発生させる
window.dispatchEvent(new Event("scroll"));

See the Pen
最初のセクションを過ぎたら上に消えて上にスクロールすると表示されるヘッダー(JavaScript)
by junpei (@junpei-sugiyama)
on CodePen.

まとめ

今回は、最初のセクションを過ぎたら上に消えて、上にスクロールすると表示されるヘッダーの作り方を解説しました。

最初のセクションを過ぎるまで待つ必要がない場合は、以下の記事を参照下さい。

あわせて読みたい
【jQuery】下にスクロールで消えて上にスクロールで表示するヘッダーの作り方
【jQuery】下にスクロールで消えて上にスクロールで表示するヘッダーの作り方

続きを見る

以上になります。

この記事が役に立ったと思ったら、シェアボタンからX(旧Twitter)などにシェアすると、いいねされてフォロワーが増えたりすることがあるよ!

 

  • この記事を書いた人

じゅんぺい

37歳からWeb制作とブログ開始。Web制作歴5年目でコーディングとWordPressオリジナルテーマ制作が中心。これまで120件以上を納品。当ブログ月間最高15万PVで、370記事以上はWeb制作の技術記事。コンテンツ販売→累計売上1200万円&1500部超え。X(旧Twitter)フォロワー7200人以上。2024年3月からブログの経験を活かしてライターとしても活動を開始。

-jQuery, Web制作