如何让这个jQuery监听器不多次激活?

时间:2012-04-30 03:51:18

标签: jquery ajax infinite-scroll

我目前有以下函数可以有效地从Django中检索JSON并通过无限滚动加载电影。但是,我发现有时这个事件会多次触发,最终会使同一页面两次。

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

阻止此侦听器每页执行多次的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

感谢Rob的帮助!我只是发布了我最终为其他人的参考做的事情。我使用了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);

答案 1 :(得分:0)

使用.one('scroll',function()而不是.scroll(function()

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

考虑到您的功能,您可能必须在重新加载时重新附加处理程序。但是一个()会确保它只在你附上它后才会发射一次。