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;
}