デザインの上部に 2 層の定位置ナビゲーションを計画しています。
ユーザーがページを下にスクロールすると、最初の層がほとんど隠れるまでナビゲーションを上にスライドさせたいと思います。
その後、ユーザーがナビゲーションにカーソルを合わせると、コンテナーが下にスライドして、最初の層が再び表示されます。
ユーザーがブラウザ ウィンドウの一番上にいる場合、このホバー効果は発生しません。
さらに、ユーザーがページの一番上までスクロールして戻ると、最初の読み込み時のように、完全な 2 層ナビゲーションが再び完全に表示されるはずです。
CSS3 transitions
JavaScript を使用してこれらのイベントを連鎖させるのに問題があり、と jQueryaddClass/removeClass
呼び出しの組み合わせに頼らなければなりませんでした。
さらに、ミッシュマッシュ全体を一度しか発射できません。したがって、ユーザーが下にスクロールして上に戻ると、アニメーションはなくなります。
私の現在のコードは、このフィドルで表示できます
うまくいけば、これは私がやろうとしていることのアイデアを与える.
この怪物に命を吹き込むのを手伝ってくれる人はいますか?
コードは次のとおりです。
HTML
<div id="nav_wrap">
<div id="nav_one">
<h2>Nav One</h2>
</div>
<div id="nav_two">
<h3>Nav Two</h3>
</div>
</div>
<p>blah blah blah etc...</p>
CSS
#nav_wrap {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 120px;
z-index: 100;
}
#nav_one,
#nav_two {
float: left;
width: 100%;
height: 48px;
background: #111;
}
#nav_two {
background: #1f4c6b;
height: 72px;
}
h2, h3 {
color: #fff;
}
#nav_wrap.fixed {
margin-top: -42px;
-webkit-transition: margin-top .5s ease-in-out;
box-shadow: 0 0 24px #111;
}
#nav_wrap.down {
margin-top: 0px;
-webkit-transition: margin-top .5s ease-in-out;
}
#nav_wrap.drop {
top: 42px;
-webkit-transition: top .5s ease-in-out;
}
#nav_wrap.up {
top: 0;
-webkit-transition: top .5s ease-in-out;
}
Javascript
var top = $('#nav_wrap').offset()
.top - parseFloat($('#nav_wrap')
.css('marginTop')
.replace(/auto/, 0));
$(window).scroll(function (event) {
var y = $(this).scrollTop();
if (y > top) {
$('#nav_wrap').addClass('fixed');
$("#nav_wrap").hover(
function () {
$(this).addClass('drop');
},
function () {
$(this).addClass('up');
}
);
} else if (y == 0) {
$('#nav_wrap').addClass('down');
}
});