scrollNav.js - manabuyasuda/jquery-plugins GitHub Wiki

スクリプト

  • $navで表示を切り替える要素を指定する
  • stateで付け外しするclass属性を指定する
// @desc - スクロールの方向を判断して、ナビゲーションの表示を切り替えます。
$(function() {
  // 表示を切り替えるナビゲーションのクラス名とstateクラス名を指定する。
  var $nav = $('.nav');
  var state = 'is-active';

  var startPos = 0;
  // displayPos以上スクロールすると処理を実行
  var displayPos = 200;

  $(window).on('scroll', function() {
    $nav.addClass(state);
    var currentPos = $(this).scrollTop();

  // 下に向かってスクロールしていて、
    // さらに、任意のスクロール量を超えている場合はstateを削除、
    // 上に向かってスクロールしている場合はstateを追加
    if(currentPos >= displayPos) {
      if(currentPos >= startPos) {
        $nav.removeClass(state);
      } else {
        $nav.addClass(state);
      }
    }
    startPos = currentPos;
  });
});

jsではステートクラスの付け替えだけをしている。要素の固定や表示はCSSで指定する。

body {
  padding-top: 3em;
}

/**
 * positionで位置を固定、z-indexで非表示のときに選択できないようにする。
 * opacityとvisivilityで表示を切り替え、transitionでアニメーションをさせる。
 */
.nav {
  margin: 0;
  padding: 1em 0;
  text-align: center;
  list-style-type: none;
  position: fixed;
  z-index: -1;
  top: 0;
  left: 0;
  width: 100%;
  opacity: 0;
  visivility: hidden;
  background-color: #fff;
  border-bottom: 1px solid #eee;
}

.nav.is-active {
  z-index: 1;
  opacity: 1;
  visivility: visible;
  transition: opacity ease-out 0.3s;
}

.nav li {
  display: inline-block;
}