0

私はいくつかの関数をjqueryの「スクロール」イベントにバインドしました。これとともに:

$window.bind('scroll', function(){ 
        fn1(...);
        afterScroll(); // function which should fired after whole scrolling.            
})

問題は、すべてのスクロールの繰り返しの後に「afterScroll()」関数を起動したいということです。しかし、ユーザーが1回スクロールすると、イベント-関数が数回発生すると思います(これをいくつかのアラートでテストしました) afterScroll() は、スクロールが完全に終了した後に短いアニメーションを追加するだけです。

例: http://activatedrinks.com/

誰かアイデア?ありがとう

よろしく、ヤニック

4

3 に答える 3

3

ユーザーがいつスクロールを終了したかを判断するのは難しく、そのようなイベントはありません。ユーザーがいつ自分でスクロールを「終了」したかを判断する必要があります。一部のユーザーはスクロールが非常に遅い場合がありますが、それでも 1 回のスクロールと見なします。何かのようなもの..

var scrolltime = false;
$window.scroll(function () {
   fn1(...);
   if (scrolltime) {
      clearTimeout(scrolltime);
   }
   //You consider 500 MS between scrolls to be "done" with scrolling.
   scrolltime = setTimeout(afterScroll, 500);
});
于 2012-05-22T15:06:54.687 に答える
2

コールバックをデバウンスする必要がありますafterScroll

基本的に、デバウンスは、最後の呼び出しを除いて、関数へのすべての繰り返し呼び出しを破棄します。必要なのは、しきい値を設定して、「繰り返し」とは何かを伝えることだけです。

これがスロットル/デバウンス機能のソースです。とても素敵で便利なライブラリです。私は通常、それを自分のプロジェクトに含めます。

于 2012-05-22T15:07:01.607 に答える
0

正しく理解できた場合は、最後にタイムアウトを設定し、スクロールが続く場合はタイムアウトをクリアしてください。

setTimeout(1000, function(){ afterScroll(); });
于 2012-05-22T15:06:35.673 に答える