スマホ(iPhoneのsafari)のようにナビをスクロールの方向によって表示したり非表示にしたりする
私はiPhoneユーザーなのですが、safariの下部にあるメニューって下へスクロールする時は消え、上へスクロールしている時は表示されてますよね?
PCのページにもそのようなメニューが増えてきているとは思います。
そこで試しに作ってみました。
早速ですが、DEMOをご覧ください!
jQueryとcss3で実装しています。
ソース
html
1 2 3 4 5 6 7 8 | <div class="navi"> <ul> <li><a href="">HOME</a></li> <li><a href="">Recruit</a></li> <li><a href="">Contact</a></li> <li><a href="">Access</a></li> </ul> </div> |
css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | .navi { background-color: #e47911; position: fixed; width: 100%; top: 0; left: 0; -webkit-transition: 0.5s; -moz-transition: 0.5s; -o-transition: 0.5s; transition: 0.5s; z-index: 9999; } .navi ul { width: 100%; text-align: center; } .navi li { display: inline-block; } .navi li a { color: #fff; padding: 15px 30px; text-decoration: none; display: block; font-size: 13px; } |
jQuery
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $(function(){ var defPos = 0; $(window).scroll(function(){ var currentPos = $(this).scrollTop(); if (currentPos > defPos) { if($(window).scrollTop() >= 400) { $(".navi").css("top", "-50px"); } } else { $(".navi").css("top", 0 + "px"); } defPos = currentPos; }); }); |
考え方としては、
動かす前とスクロールの値と動かした直後のスクロールの値を比較して、
直後の値が大きければ非表示(下方向)、
前の値が大きければ表示(上方向)、
といった形になります。
読み進めている時は、メニューを消して、
戻ろうかなと思った時にメニューを表示するといった形になるので、
コンテンツを読むユーザーに沿った機能になると思います。
今後この形が当たり前のように実装されていくかもしれませんね!
Author Profile
スターフィールド編集部
SHARE