< 記事共通の特徴 >

全デモのソース一式がダウンロード可能です。
ソース一式はローカル環境ですぐに使える構成になっています。

下部固定メニューの作り方09
(通常メニュー通過後に固定メニューを表示する)

下部固定メニューの作り方11
(ヘッダー・フッター付近:固定メニュー非表示)


下部固定メニューの作り方10
(上下の通常メニュー付近:固定メニュー非表示)

ヘッダー・フッター付近において固定メニューを非表示とする

解説

用途・理由

常にメニューを選択できるように、メニューを固定表示したい。
ただ、ヘッダー付近・フッター付近にはメニューに相当する内容があるため、
固定メニューは非表示にしたい。

通常メニュー(ヘッダー側)が完全に見えない事の判定

ヘッダー付近の通常メニューが完全に見えなくなるスクロール量は下記コードで取得できます。
var change_len1 = $('.menu.normal.near_header').position().top + $('.menu.normal.near_header').outerHeight();
※ .menu.normal.near_header 部分は、通常メニュー(ヘッダー付近)を示す id または class を指定します。
※ 「ページ最上部から通常メニュー(ヘッダー付近)上辺までの距離」+「通常メニュー(ヘッダー付近)の高さ」です。

よって、下記コードで判断できます。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
  $(window).scroll(function() {
    var scroll_len = $(window).scrollTop();
    var change_len1 = $('.menu.normal.near_header').position().top + $('.menu.normal.near_header').outerHeight();
    if (scroll_len > change_len1) {
      /* 通常メニュー(ヘッダー側)が完全に見えない */
    } else {
      /* 通常メニュー(ヘッダー側)の少なくとも一部が見えている */
    }
  });
</script> 

通常メニュー(フッター側)が完全に見えない事の判定

フッター付近の通常メニューが見え始めるスクロール量は下記コードで取得できます。
var window_len = $(window).height();
var change_len2 = $('.menu.normal.near_footer').position().top - window_len;
※ .menu.normal.near_footer 部分は、通常メニュー(フッター付近)を示す id または class を指定します。
※ 「ページ最上部から通常メニュー(フッター付近)上辺までの距離」-「ブラウザ画面の高さ」です。

よって、下記コードで判断できます。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
  $(window).scroll(function() {
    var scroll_len = $(window).scrollTop();
    var window_len = $(window).height();
    var change_len2 = $('.menu.normal.near_footer').position().top - window_len;
    if (scroll_len < change_len2) {
      /* 通常メニュー(フッター側)が完全に見えない */
    } else {
       /* 通常メニュー(フッター側)の少なくとも一部が見えている */
    }
  });
</script>

通常メニューが完全に見えない時のみ固定メニュー表示

上述した内容から、ヘッダー・フッター付近にメニューが存在し、
そのメニューが完全に見えない場合のみ、固定メニューを表示する処理は下記コードになります。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
<script>
  $(window).scroll(function() {
    var scroll_len = $(window).scrollTop();
    var window_len = $(window).height();
    var change_len1 = $('.menu.normal.near_header').position().top + $('.menu.normal.near_header').outerHeight();
    var change_len2 = $('.menu.normal.near_footer').position().top - window_len;
    if ( (scroll_len > change_len1) && (scroll_len < change_len2) ) {
      $('.menu.fixed').animate({height: 'show'}, 'slow' );
    } else {
      $('.menu.fixed').animate({height: 'hide'}, 'slow' );
    }
  });
</script>
※ .menu.fixed 部分は、固定メニューを示す id または class を指定します。

まとめ

上記ポイントをまとめると、下記のようなコードになります。
※ 注意:<html> ではなく、正式な <!DOCTYPE html> で書かないと $(window).height() が正しく動作しません。
<!DOCTYPE html>
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <style>
    html, body { margin: 0; text-align: center; }
    .top_image {
      display: table;
      height: 400px;
      width:  100%;
      background: #ffdd88;
    }
    .top_image span {
      display: table-cell;
      font-size: 60px;
      vertical-align: middle;
    }
    .menu {
      display: none;
      width: 100%;
      background: #4499cc;
      position: fixed;
      bottom: 0;
      z-index:999;
    }
    .menu.normal {
      position: relative;
      display: block;
      z-index: 0;
    }
    .menu h1 { margin: 0; padding: 10px; }
  </style>
</head>
<body>
  <div id="wrapper">

    <div class="top_image"><span>トップ画像部分(^^♪</span></div><!-- top_image -->
    <div class="menu normal near_header">
      <h1>通常メニュー(ヘッダー付近)</h1>
      <a href="dummy_url" class="hover">Top</a>
      <a href="dummy_url" class="hover">Diary</a>
      <a href="dummy_url" class="hover">List</a>
      <a href="dummy_url" class="hover">Help</a>
      <a href="dummy_url" class="hover">Links</a>
    </div><!-- menu -->

    <!-- スクロールを分かりやすくするために、番号と改行を入れています。(START) -->
    1<br/>2<br/>3<br/>4<br/>5<br/>6<br/>7<br/>8<br/>9<br/>10<br/>
    11<br/>12<br/>13<br/>14<br/>15<br/>16<br/>17<br/>18<br/>19<br/>20<br/>
    21<br/>22<br/>23<br/>24<br/>25<br/>26<br/>27<br/>28<br/>29<br/>30<br/>
    31<br/>32<br/>33<br/>34<br/>35<br/>36<br/>37<br/>38<br/>39<br/>40<br/>
    51<br/>52<br/>53<br/>54<br/>55<br/>56<br/>57<br/>58<br/>59<br/>60<br/>
    <!-- スクロールを分かりやすくするために、番号と改行を入れています。(END) -->

    <div class="menu normal near_footer">
      <h1>通常メニュー(フッター付近)</h1>
      <a href="dummy_url" class="hover">Top</a>
      <a href="dummy_url" class="hover">Diary</a>
      <a href="dummy_url" class="hover">List</a>
      <a href="dummy_url" class="hover">Help</a>
      <a href="dummy_url" class="hover">Links</a>
    </div><!-- menu -->

    <div class="menu fixed">
      <h1>下部固定メニュー</h1>
      <a href="dummy_url" class="hover">Top</a>
      <a href="dummy_url" class="hover">Diary</a>
      <a href="dummy_url" class="hover">List</a>
      <a href="dummy_url" class="hover">Help</a>
      <a href="dummy_url" class="hover">Links</a>
    </div><!-- menu -->

  </div><!-- wrapper -->
<script>
  $(window).scroll(function() {
    var scroll_len = $(window).scrollTop();
    var window_len = $(window).height();
    var change_len1 = $('.menu.normal.near_header').position().top + $('.menu.normal.near_header').outerHeight();
    var change_len2 = $('.menu.normal.near_footer').position().top - window_len;
    if ( (scroll_len > change_len1) && (scroll_len < change_len2) ) {
      $('.menu.fixed').animate({height: 'show'}, 'slow' );
    } else {
      $('.menu.fixed').animate({height: 'hide'}, 'slow' );
    }
  });
</script> 
</body>
</html>

下部固定メニューの作り方09
(通常メニュー通過後に固定メニューを表示する)

下部固定メニューの作り方11
(ヘッダー・フッター付近:固定メニュー非表示)