スクロールしたらヘッダを固定、ナビをちょっと変化させてみる。

スクロールしたらメニューを固定、の動きをつけてみました。

こんな感じに動いてます。最上部に固定されたときにちょっとだけ変化します。

cssのアニメーションで動きを実装して、それをjQueryでつけたり外したり、addClassとremoveClassだけでもいろんなことができるかも。

html

headerとmain。headerの中にnav、メニューがあります。

<!-- ヘッダ部分 -->
<header>
  <nav>
    <ul>
      <li>メニュー1</li>
      <li>メニュー2</li>
      <li>メニュー3</li>
    </ul>
  </nav>
</header>

<!-- コンテンツ部分 -->
<main>
  <p>コンテンツ</p>
</main>

ヘッダを固定するcssを用意

画面をスクロール、ポイントに来たらcssのposition: fixedで固定表示させたい。

.is-fixed {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 2;
  width: 100%;
}

js(jQuery)

$(function() {
  var $win = $(window),
      $main = $('main'),
      $nav = $('nav'),
      navHeight = $nav.outerHeight(),
      navPos = $nav.offset().top,
      fixedClass = 'is-fixed';

  $win.on('load scroll', function() {
    var value = $(this).scrollTop();
    if ( value > navPos ) {
      $nav.addClass(fixedClass);
      $main.css('margin-top', navHeight);
    } else {
      $nav.removeClass(fixedClass);
      $main.css('margin-top', '0');
    }
  });
});

スクロールしてnavの位置に来たときに、navに.is-fixedを付与。elseはスクロールしたけれどnavまで到達していなかったとき、margin-topをリセットして初期表示と同じ状態に。

参考にさせていただいた記事はこちら。ありがとうございました。

jQuery:スクロールしたらヘッダーやナビゲーションを固定・変化させる動きを実装するサンプルコード 5

固定したついでにナビが透過、高さが変化するcss

header  {
  position: fixed;
  top: 0;
  left: 0;
  z-index: 2;
  width: 100%;
  transition: .3s;
  background-color: rgba(255,255,255,0);
  height: 200px;
}

.is-fixed  {
  position:  fixed;
  top: 0;
  left: 0;
  z-index: 2;
  width: 100%;
  background-color: rgba(255,255,255,0.9);
  -webkit-transition: all .4s ease 0s,background .6s ease .2s;
  transition: all .4s ease 0s,background .6s ease .2s;
  -webkit-overflow-scrolling: touch;
  overflow-scrolling: touch;
  height: 100px;
}

backgroundを透過、高さを200pxから100pxに変えています。カクカクせずヌルッと動くよう、アニメーションを加えます。

今更メニューをカスタマイズしてみました。
途中ごはんを食べたり小休止していたために、しばらくの間スマホメニューが崩壊していたようです。
ごめんなさい。

SHARE

  • *
  • *
  • *