【JavaScript】上にスクロールするとにゅっと出てくるメニューを作る
問題
長い画面で、メニューや検索フォームなどが、近くにいて欲しいんだけど、いつも見えると邪魔。
下へ下へスクロールしてみているときは隠れていて、
上にスクロールすると出てくるメニューを作りたい。
答え
stickyな動きは、CSSで可能。
普段はスクロールとともに上に隠れて行って欲しいので、必要なだけtopを引いておきたいのだが、
JavaScriptで測って、JavaScriptでtopのマイナスを入れるので、今回は書かなくてOK。
「にゅっ」っとした感じを出したいので、CSSのtransitionを設定しておく。
.sticky-menu { position:sticky; top:0; transition:.5s; }
上にスクロールしたことを検出して、topを0に戻したり、
下にスクロールしたことを検出して、topを必要なだけ引いたりする処理は、こんな感じ。
$(function(){ var $sticky = $('.sticky-menu'); //position:sticky が使えるときだけ使う if ($sticky.css('position') == 'sticky') { var lp = 0; $(window).on('scroll', function(){ var cp = $(this).scrollTop(); if (lp < cp) { //下へ → 上に引っ込むアニメーション $sticky.css('top', height); } else if (lp > cp) { //上へ → 下に出てくるアニメーション $sticky.css('top', 0); } lp = cp; }); } });
HTMLはシンプルに、classを付与しておくだけ
<div class="sticky-menu">menu1 | menu2 | menu3 | menu4 | menu5</div>
デモ
以上を組み合わせるとこうなる。
→ デモはこちら
コメント