2012-10-06 155 views
2

我正在使用jquery.window.scroll函数与这些代码无限加载。jQuery无限滚动双加载

$(window).scroll(function(){ 
    if ($(window).scrollTop() == $(document).height() - $(window).height()){ 
     var page = $('#lastPostsLoader').attr('page')*1; 
     $('#lastPostsLoader').attr('page', page + 1); 
     DataLoadFunction(page); 
    } 
}); 

但是,当滚动到底部时,这些代码会请求双倍的时间,有时会出现错误的页面。喜欢这个;

滚动底部--->加载页面1和加载页面2 --->滚动底部--->加载页面3和加载页面2 --->滚动底部--->加载页面4加载页面5 ........

那么我错在哪里?谢谢...

+2

当页面编号发生变化时,您可能希望将标志设置为true,然后在“DataLoadFunction”完成后将其设置为false。否则,如果您滚动到底部,然后再次滚动,它会两次调用该函数(如果您滚动更多,则会多次调用该函数)。我遇到过类似的问题,并使用了一个标志为我工作。然后你会在你的if语句中检查'!loading',假设你的标志叫做'loading'。 – ClarkeyBoy

回答

4

你应该防止dataload,直到下一个数据到达。在从服务器加载数据时将变量isLoadingData设置为true。

var isLoadingData; 
$(window).scroll(function(){ 
     if (($(window).scrollTop() == $(document).height() - $(window).height()) && !isLoadingData){ 
       isLoadingData = true; 
      var page = $('#lastPostsLoader').attr('page')*1; 
      $('#lastPostsLoader').attr('page', page + 1); 
      DataLoadFunction(page, function(){ // callback get called after data load 
         isLoadingData = false; 
      }); 
     } 
    }); 
+0

仍然是同样的问题... – pheaselegen

+0

我建议你试试$(window).unbind('scroll')。scroll。绑定前解除滚动。这可能是滚动窗口附加了两次。 – Anoop

+1

好的。我修改了ajax负载目标divs,并且我使用了你的解决方案。所以真正运行良好...谢谢.. – pheaselegen