私も最高の JQuery アーティストではありませんが、これでうまくいくと思います。
var mywindow = $(window);
var mypos = mywindow.scrollTop();
mywindow.scroll(function() {
if(mywindow.scrollTop() > mypos)
{
$('.myDIV').fadeOut();
}
else
{
$('.myDIV').fadeIn();
}
mypos = mywindow.scrollTop();
});
mypos
ユーザーが上下にスクロールするたびに更新されていることがわかります。
編集
リクエストに応じて、フィドルでいくつかの更新を行いました: http://jsfiddle.net/GM46N/2/。.fadeIn()
フィドルの js 部分で、2 つのオプションを作成したことがわかり.fadeOut()
ます.slideToggle()
。
更新されたjsは次のとおりです。
var mywindow = $(window);
var mypos = mywindow.scrollTop();
var up = false;
var newscroll;
mywindow.scroll(function () {
newscroll = mywindow.scrollTop();
if (newscroll > mypos && !up) {
$('.header').stop().slideToggle();
up = !up;
console.log(up);
} else if(newscroll < mypos && up) {
$('.header').stop().slideToggle();
up = !up;
}
mypos = newscroll;
});
また、追加の変数 を追加してup
、ユーザーが最初に上にスクロールしたときにのみイベントを発生させ、次にトグルが発生するのは、ユーザーが下にスクロールしたときなどです。それ以外の場合、イベントは何度でも発生します (前のコードを使用してテストすると.slideToggle()
、大量のイベント発生を確認できます)。
再編集: も追加.stop()
したので、まだ実行中の効果がある場合は、その効果が最初に停止され、ユーザーがすばやく上下にスクロールした場合の遅延を防ぐことができます。