ホームページ作成/レイアウトの作成・調整 (HTML,CSS)

指定量スクロールした時点で上端にメニューを出す方法(3ページ目)

ウェブページをある程度スクロールした段階で、描画領域の上端にメニューなどの任意の「バー」を固定表示させる方法を解説。jQueryを使えば、「現在のスクロール位置」を取得してから「指定量以上スクロールされたかどうか」を判定して、ボックスの表示・非表示を切り替える……という処理も、とても簡単に実現できます。

西村 文宏

執筆者:西村 文宏

ホームページ作成ガイド

2. スクロール量を判定して、バーの表示・非表示を切り替えるスクリプトを記述する

最後に、スクリプトを記述しましょう。必要なソースは以下の通りです。修正する必要がある箇所は、「バーを作っている要素に付加したid名」と、「目的のスクロール量」の2箇所(太字で掲載した箇所)のみです。それ以外は、コピー&ペーストするだけで問題ありません。
<script type="text/javascript">
   // ページの読み込みが完了してから実行
   $(function() {
      // スクロール途中から表示したいメニューバーを指定
      var navBox = $("#headbar");

      // メニューバーは初期状態では消しておく
      navBox.hide();

      // 表示を開始するスクロール量を設定(px)
      var TargetPos = 350;

      // スクロールされた際に実行
      $(window).scroll( function() {
         // 現在のスクロール位置を取得
         var ScrollPos = $(window).scrollTop();
         // 現在のスクロール位置と、目的のスクロール位置を比較
         if( ScrollPos > TargetPos ) {
            // 表示(フェイドイン)
            navBox.fadeIn();
         }
         else {
            // 非表示(フェイドアウト)
            navBox.fadeOut();
         }
      });
   });
</script>
上記のJavaScriptソースは、事前にjQueryが読み込まれていることが前提ですので注意して下さい(読み込み方法は前ページでご紹介した通りです)。上記の記述内容について、各行ごとに以下で簡単に解説しておきます。

対象のメニューバーに付加したid名 (6行目):
var navBox = $("#headbar");
何度も同じid名を記述するのを避けるため、navBoxという変数に格納しています。実際のid名に合わせて修正して下さい。

対象の要素を非表示にする (9行目):
navBox.hide();
上記のように、hideメソッドを使うと、対象の要素を非表示にできます。ここでは、初期状態ではメニューバーを表示したくないため、非表示にしています。

メニューバーを表示したいスクロール位置を指定 (12行目):
var TargetPos = 350;
メニューバーの表示を開始したいスクロール位置を、数値で指定します。単位はピクセル(px)です。望みの分量を指定して下さい。

スクロールされたときに、何らかの処理を実行する (15~27行目):
ブラウザがスクロールされたタイミングに合わせて何らかの処理をしたい場合は、以下のように記述します。
$(window).scroll( function () {
   // 実行したい処理内容をここに記述
});

現在のスクロール位置を取得する (17行目):
現在のスクロール位置(=「ページの上端」から「現在見えている領域の上端」までの距離)を取得するには、以下のように記述します。
var ScrollPos = $(window).scrollTop();
ここでは、現在のスクロール位置を、変数ScrollPosに格納しています。

「目的のスクロール位置」は12行目で変数TargetPosに格納しましたから、これら2つの変数(TargetPosとScrollPos)の値を比較する(19行目)ことで、「目的のスクロール位置を越えたかどうか」を判別できます。

メニューバーを「フェイドイン」アニメーションと共に表示する (21行目):
指定の要素を、フェイドインアニメーションを伴って表示するには、以下のように記述します(指定の要素が既に表示されている場合は何もしません)。
navBox.fadeIn();

メニューバーを「フェイドアウト」アニメーションと共に非表示にする (25行目):
同様に、フェイドアウトアニメーションを伴って非表示にするには、以下のように記述します(指定の要素が既に消えている場合は何もしません)。
navBox.fadeOut();

完成

ある程度スクロールすると、上部にメニューバーが表示されるサンプルページ

ある程度スクロールすると、上部にメニューバーが表示されるサンプルページ

以上のように、jQueryを活用することで、とても簡単に「スクロール量を判定して、メニューバーの表示・非表示を切り替える」スクリプトが実現できます。これまでにご紹介したすべてのソースを使って作成したサンプルページを、以下に再掲しておきます。

スクロール量に応じてメニューバーを表示する例

サンプルページのHTMLソース中には、各箇所の意味をコメントの形で加えてありますので、本記事の解説と併せてご参照下さい。

ある程度スクロールされた時点で、上端にメニューバーを表示する方法

今回は、閲覧者のスクロール量に応じて、ウインドウ(描画領域)の上端にメニューバーを表示する方法をご紹介致しました。スクロール位置を取得して表示・非表示を切り替える処理は、jQueryを活用すると簡単に短く記述できることがお分かり頂けたと思います。今回の例では「メニューバー」を掲載しましたが、他にも様々な用途に活用できるでしょう。ぜひ、試してみて下さい。

【関連記事】

【編集部おすすめの購入サイト】
楽天市場でホームページ作成関連の書籍を見るAmazon でホームページ作成の参考書を見る
  • 前のページへ
  • 1
  • 2
  • 3
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます