0

現在、Django から JSON を効果的に取得し、無限スクロールでムービーをロードする次の関数があります。ただし、このイベントが複数回トリガーされ、同じページが 2 回取得されることがあります。

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

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

4

2 に答える 2

1

助けてくれたロブに感謝!私は他のみんなの参考のために私がやったことを投稿しているだけです。underscore.js ライブラリの debounce 関数を使用しました。

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);
于 2012-04-30T15:01:50.440 に答える
0

.scroll(function() の代わりに .one('scroll', function() を使用してください

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

ただし、機能を考えると、リロード時にハンドラーを再アタッチする必要がある場合があります。ただし、 one() は、アタッチ後に一度だけ起動するようにします。

于 2012-04-30T04:00:24.630 に答える