ホームページ作成/Webサイトのユーザビリティ

スクロールしてもサイドバーが消えないよう固定する(2ページ目)

ページの端にあるナビゲーションメニューは、閲覧者がスクロールすると上方に消えてしまいます。それを防ぐため、スクロールの途中でメニューだけを固定させてみましょう。「メニューを作るボックスの表示位置」と「ユーザのスクロール量」とを比較して、メニューの固定・非固定を切り替えるスクリプトを作ります。jQueryを使えば簡単です。

西村 文宏

執筆者:西村 文宏

ホームページ作成ガイド

最初はスクロールに連動→画面から消える前に固定されるメニューを作る

さて、それでは、jQueryを使って「最初のうちはスクロールに連動するが、消える前に固定されるサイドメニュー」を作ってみましょう。以下の4ステップで実現できます。

0. jQuery本体を読み込む
1. メニュー部分にidを付加する
2. サイドメニューを途中から固定させるためのCSSを記述する
3. メニューの表示位置とスクロール量を比較して固定・非固定を切り替えるスクリプトを書く

以下に順番に解説していきます。

0. jQuery本体を読み込む

ここではjQueryを使うので、最初にjQuery本体を読み込んでおく必要があります。例えば、HTML中に以下の1行を記述すると、jQuery配布サイトが提供しているCDNサーバからjQuery本体を読み込めます。よく分からない場合は、とりあえず以下の1行をHTML内に記述しておいて下さい。
<script type="text/javascript" src="//code.jquery.com/jquery-1.11.1.min.js"></script>
なお、既に自分のウェブサーバ上にjQuery本体があるなら、そちらを読み込むよう記述しても問題ありません。

1. メニュー部分にidを付加する

「(ユーザのスクロール操作から独立して)固定させたいメニュー部分」を作っているボックスに、任意のid名を割り振っておきます。id名は何でも構いませんが、ここでは例として、「fixedNavi」というid名を付加しておきます。
<div id="fixedNavi">
   ~サイドメニュー~
</div>
HTML側に必要な記述は、ただこれだけです。あとは、JavaScript側(jQuery側)で、このid名を使って処理を記述します。

※特定の要素をページの端に寄せて「サイドバー(サイドメニュー)」を作るための方法については、ここでの本題ではないので説明を割愛しています。必要であれば、後述のサンプルページのHTMLソース等をご参照下さい。

2. サイドメニューを途中から固定させるためのCSSを記述する

次に、サイドメニューを固定させるためのCSSソースを記述します。positionプロパティに値「fixed」を指定し、固定させたい座標を指定するだけです。
.fixBox {
   position: fixed;
   top: 0px;
   right: 0px;
}
上記は、サイドメニューが右端にある場合の例です。上端から0px・右端から0pxの位置に固定します。もし、左端にあるのであれば、「right: 0px」ではなく「left: 0px」と記述して下さい。

このCSSソースは、最初はどこにも適用しません。後から、ユーザのスクロール操作に合わせて、スクリプト側で適用させます。状況に応じて上記のCSSを適用させたり適用させなかったりすることで、メニュー部分の固定・非固定を切り替えます。

3. メニューの表示位置とスクロール量を比較して固定・非固定を切り替えるスクリプトを書く

前ページでも少しご紹介しましたが、「サイドメニューの表示位置」と、「ユーザがスクロールした量」を比較することで、サイドメニューの表示を固定したり非固定にしたりします。そのためのスクリプトは、以下の通りです。まずは、全文を掲載しておきます。
<script type="text/javascript">

   // ページの読み込みが完了してから実行
   $(function() {

      // 途中から固定したいボックスの情報を得る
      var navBox = $("#fixedNavi");
      var navOst = navBox.offset().top;

      // スクロールされた際に実行
      $(window).scroll( function() {
         // 現在のスクロール位置と、固定したいボックスの位置を比較
         if( $(window).scrollTop() > navOst ) {
            // 固定用のclassを付加
            navBox.addClass("fixBox");
         }
         else {
            // 固定用のclassを削除
            navBox.removeClass("fixBox");
         }
      });

   });
</script>
このわずか20行程度のスクリプトで、「ユーザのスクロール操作によって、画面から消え去る前に固定されるサイドメニュー」ができあがります。上記のソースはコピー&ペーストするだけで使えますが、ソース中の「#fixedNavi」部分は「サイドメニューに割り振ったid名」に、「fixBox」部分は「サイドメニューを固定するためのCSSに割り振ったclass名」に合わせて下さい。

なお、このJavaScriptソースの意味については、次のページで簡単にご紹介致します。
  • 前のページへ
  • 1
  • 2
  • 3
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

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