海外テーマや有料テーマでは、グローバルメニューが画面TOPに到達すると固定化されたり、一度消えたグローバルメニューが上スクロールすると上からすっと降りてきて表示されるギミックをよく見かけます。
このサイトで使用しているテーマは無料テーマのCocoonです。Cocoonのグローバルメニューはスクロールするとそのまま消えていきます。ちょっと物足りない感じがしていました。
Cocoonでもグローバルメニューのギミックを実現することはできます(当たり前ですが)。
この記事では、Cocoonのグローバルメニューを画面TOPで固定化しつつ、下スクロールで非表示、上スクロールで表示するカスタマイズについてご紹介します。
jQuery
Cocoon子テーマであれば、javascript.jsとかに貼り付けます。
WordPressなので、$はjQueryに置き換えた方が良いでしょう。
javascriptにメディアクエリつけないとスマホの時に変なスペースが出てがたつきます。
//グローバルメニューを下スクロール時に画面TOPに固定化する
$(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');
}
});
});
//グローバルメニューを下スクロール時に消す、上スクロール時に表示させる
$(function() {
var startPos = 0;
var $nav = $('nav'),
navPos = $nav.offset().top;
$(window).on('scroll',function(){
var value = $(this).scrollTop();
if ( value >= startPos ) {
if( value >= navPos + 50 ){
$('nav').addClass('hide');
}
} else {
$('nav').removeClass('hide');
}
startPos = value;
});
});
CSS
media queryは必要応じて自分でつけてください。
#header-container .navi.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;
}
#header-container .navi.hide{
transform: translateY(-100%);
}
まとめ
Cocoonは超多機能ですが、PCメニューの固定化などはオプションにはないので、今回ご紹介した方法を取り入れるとCocoonを使った他のサイトと差別化できるのではないかと思います。