2012-04-30 11 views
0

私は現在、DjangoからJSONを効果的に取得し、ムービーを無限のスクロールで読み込む次の機能を備えています。ただし、このイベントが複数回トリガされることがあり、同じページが2回表示されることがあります。このjQueryリスナーを複数回起動させないにはどうすればよいですか?

$(window).scroll(function() { 
    var break_point = $(document).height() - ($(window).height() * 1.02); 
    if ($(window).scrollTop() >= break_point) { 
    var timePeriod = $('.tab-content').find('.active').attr('id'); 
    var nextPage = $('#'+timePeriod+' ul li:last').attr('data-next'); 
    if (nextPage) { 
     loadMovies(timePeriod, nextPage); 
    } 
    } 
}); 

このリスナーがページごとに複数回実行されないようにするにはどうすればよいですか?

+0

[これはあなたが探しているものですか](http://stackoverflow.com/questions/9144560/jquery-scroll-detect-when-user-stops-scrolling) - 関連:[4620906](http: //stackoverflow.com/questions/4620906)、[8931605](http://stackoverflow.com/questions/8931605) –

+0

はい、これは完全に機能しました!ありがとう! – ArKi

答えて

1

助けを借りてくれてありがとうございました!他の人の参考にしたことを投稿しています。私はunderscore.jsライブラリのデバウンス機能を使用しました。

var infiniteScroll = _.debounce(function() { 
    var break_point = $(document).height() - ($(window).height() * 1.02); 
    if ($(window).scrollTop() >= break_point) { 
    var timePeriod = $('.tab-content').find('.active').attr('id'); 
    var nextPage = $('#'+timePeriod+' ul li:last').attr('data-next'); 
    if (nextPage) { 
     loadMovies(timePeriod, nextPage); 
    } 
    } 
}, 250); 

$(window).scroll(infiniteScroll); 
+0

私の問題を手伝ってくれてありがとう! –

0

使用.one( 'スクロール'、()関数の代わりに.scroll(関数()あなたの機能を考える

http://api.jquery.com/one/

の、あなたがが、リロードにハンドラを再接続する必要があるかもしれません。しかし、

+0

ねえ、起動後にハンドラをどうやって再取り付けするの? – ArKi

+0

たとえば、one()を含むコードを関数に入れてから、ドキュメント内のその関数を呼び出して、その関数をすぐに呼び出すことができます。または、同じ機能をそのままの状態にして、関数に入れることはできますが、初めてajax(おそらく?)呼び出しを行い、unbindを呼び出して、成功したら関数を再度呼び出します。 – Colleen

関連する問題