2013-07-28 6 views
10

私と一緒にいらしてください、これは数回質問されたかもしれませんが、ちょっと探してから正確な答えを得ることはできません。スクロールするときにdivを非表示にしてスクロールアップするときに表示するにはどうすればいいですか?

基本的には、ユーザーがスクロールダウンを開始すると、ある高さの後にdivが消えてしまい、ユーザーがスクロールアップを開始するまで消えてしまいます。ユーザーがスクロールアップを開始すると、divが再び表示されます。私はこれにもある種のフェード効果が必要です。

これまで私は他の回答を見てきました。これにより、divは下にスクロールすると特定の高さの後に消えますが、上にスクロールしたときに同じ高さに達すると再び表示されます。ユーザーがスクロールアップを開始したときにdivがすぐに表示されるようにしたい。

var mywindow = $(window); 
var mypos = mywindow.scrollTop(); 
mywindow.scroll(function() { 
    if(mywindow.scrollTop() > mypos) 
    { 
     $('.myDIV').fadeOut(); 
    } 
    else 
    { 
     $('.myDIV').fadeIn(); 
    } 
    mypos = mywindow.scrollTop(); 
}); 

は、あなたが更新されmyposを見ることができます:このコードは、私はどちらかの最大のjQueryの-アーティストではないんだけど、私は、これは動作するはずだと思う...

jQuery(window).scroll(function() { 

    if (jQuery(this).scrollTop()>0) 
    { 
     jQuery('.myDIV').fadeOut(); 
    } 
    else 
    { 
     jQuery('.myDIV').fadeIn(); 
    } 
}); 
+0

オプションは、追加のvarに '.scrollTop()'の値を格納することです。次に、スクロールしたときに新しい '.scrollTop()'が保存された値よりも大きいか小さいかをチェックし、それに応じて新しい値を保存します。 – jdepypere

+0

問題は、私はjQueryとあまりにも偉大ではないです。 – Maaz

+0

'jQuery(this).scrollTop()> 0' ??あなたのscrollTopがいつ '0 '未満になると思いますか – exexzian

答えて

15

headroom.jsを試してみてください。このトリックを行うには、少し小さなjavascriptのプラグインです。

+3

リンクは答えではありません。それは素敵なプラグイン、btw ....平和:) – PJunior

25

を任意のアニメーションのどちらかを持っていませんユーザーがスクロールするたびに、上下に移動します。 http://jsfiddle.net/GM46N/2/

編集

私はバイオリンで、あなたの要求に応じて、いくつかのアップデートを行いました。私が2つのオプションを作ったことを、あなたはフィドルのjs-部分で見ることができます.1つは.fadeIn().fadeOut()です(私が提供したコードがあなたのサイトで動作しています)、もう1つは.slideToggle()です。

はここで更新JS:私もトグルがトリガーされますユーザーがスクロールアップは初めてと次回ときである場合にのみイベントを発生し、余分な変数、upを追加しました

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; 
}); 

彼は下にスクロールします。さもなければ、イベントは何度も発生します(大量のイベント発生を確認するには、前のコードを .slideToggle()でテストすることができます)。

再編集:私もまだある場合ので、今その旨を実行している効果は、ユーザーが迅速&上下にスクロールする場合の遅れを防ぐために、最初に停止します、.stop()を追加しました。

+0

これは完全に機能します。どのようにフェードイン/フェードアウトエフェクトを追加するのですか?現在のところ、表示されたり消えたりします。私はそれを上から持ってくることが好きですか?それが消えたら、上に行くことによって自分を取り除きますか? (これはメニューです)。 – Maaz

+0

現在、あなたは '.fadeIn()'と '.fadeOut()'を使っています。あなたが望むことをするには、複数のオプションがあります。[.slideToggle()](http://api.jquery.com/slideToggle/)を使うことができます。これは時々ちょっと変わって見えるので、 '.slideToggle()'のように完全にスライドさせて展開したくない場合は、[.animate()](http:// api .jquery.com/animate /)を編集し、 'top' cssを次のように編集します。 '$( '。something')。animate({top:" 10px "});'。 – jdepypere

+0

実際の回答にいくつかの例が組み込まれている必要があります。私は嫌なことを試みました。実際にスクロールアップするときには、実際にスクロールアップする時間が必要です。スクロールアップ位置を使用し、ユーザーがスクロールアップするたびに変数を更新する方法が原因です。 – Maaz

0

あなたのコードを使用しましたが、ちょうど.slideToggle().fadeIn.fadeOutに置き換えました。

関連する問題