前提
スマホ用のメインナビについて、下記の要件で表示非表示をしたいのですが、どうしても複数の要件を満たせずにおります。
実装したい仕様
【仕様1】
1、初期状態では表示。
2、一定値(例として50px)下にスクロールしたら、非表示にしたい。
3、ブラウザの上まで戻ってきたら初期状態に戻る。
【仕様2】
1、仕様1の条件を満たした状態で現在値から上に50pxスクロールしたら表示させる
2、仕様1の条件を満たした状態で現在値から下に50pxスクロールしたら非表示させる。
現状
class付与をして表示非表示については、cssで制御している状況です。
要件1については実装した経験があり特に問題なかったのですが、要件2も並行して実装しようとするとどうしてもうまくいきません。
要件2についてはスクロールした瞬間にアクションするコードを掲載しております。(まずまず50pxスクロールしたらアクションさせる事ができておりません。)
優先したい要件としては要件2になります。
勉強不足な事は百も承知しておりますが、ご助力いただければ幸いです。
該当のソースコード
<header> <div class="header_inner" id="header"> <nav class="nav_02"> <ul class="nav_02_inner"> <li><a href="">リンク1</a></li> <li><a href="">リンク1</a></li> <li><a href="">リンク1</a></li> <li><a href="">リンク1</a></li> </ul> </nav> </div> </header> <script> // 要件1のための記述 // スクロールによってheaderの表示を切り替える $(window).scroll(function() { winScroll = 50; winScrollTop2 = $(this).scrollTop(); if (winScrollTop2 > winScroll) { $('.nav_02').addClass('hide'); }else { $('.nav_02').removeClass('hide'); } }); // 要件2のための記述 // スクロールすると表示を切り替える var startPos = -1, winScrollTop = 0; $(window).scroll(function() { winScrollTop = $(this).scrollTop(); if (winScrollTop > startPos) { $('.nav_02').addClass('hide'); } else { $('.nav_02').removeClass('hide'); } startPos = winScrollTop; }); </script> <style> nav.nav_02 { position: absolute; transition: all 0.5s ease; } nav.nav_02.hide{ transition: all 0.5s ease; transform: translateY(-100%); } </style>
回答2件
あなたの回答
tips
プレビュー