2012-05-19 76 views
22

我使用下面的代码,其工作时的滚动条到达botttom,负载阿贾克斯80%

if($(window).scrollTop() == $(document).height() - $(window).height()){ 

但是我想,当我到达了滚动的70%的Ajax是解雇不是100.

+7

研究更多.. – Niranjan

回答

75

提供当前的检查射击时滚动到页面的底部,你可以尝试一些基本的算术:

if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7){ 
              //where 0.7 corresponds to 70% --^ 

确保添加检查,以不火多个同时Ajax请求,如果你还没有。

这是相当出了问题的范围,但如果你想的是如何防止多个请求的例子被同时开除:

声明一个全局变量,例如processing

然后其纳入你的函数:

if (processing) 
    return false; 

if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.7){ 
    processing = true; //sets a processing AJAX request flag 
    $.post("url", '<params>', function(data){ //or $.ajax, $.get, $.load etc. 
     //load the content to your div 
     processing = false; //resets the ajax flag once the callback concludes 
    }); 
} 

这是一个使用VAR跟踪,如果有适合您滚动功能或不活跃Ajax请求的一个简单的例子,它不会干扰您可能拥有的任何其他并发Ajax请求。

编辑:JSFiddle example

请注意,用%来衡量原稿的高度可能是一个坏主意,考虑到文档的高度将每次加载一些时间增加,使其成为引发Ajax请求是相对更远离页面底部(绝对尺寸明智)。

我推荐使用(200-700左右)的固定值的偏移来防止:

if ($(window).scrollTop() >= $(document).height() - $(window).height() - 700){ 
           // pixels offset from screen bottom --^ 

实施例:JSFiddle

编辑:要重现的问题在所述第一代码百分比,加载50 div。当您加载下一个div时,它只会将文档总高度增加2%,这意味着只要将这2%滚动回文档高度的70%,就会触发下一个请求。在我的固定示例中,只有当用户处于距屏幕底部定义的绝对像素范围时,定义的底部偏移量才会加载新内容。

+0

此代码效率不高。它会** **多次启动。 – Niranjan

+0

@ngen'确保添加一个检查,以便不会触发多个同时发生的Ajax请求,如果您还没有。“这超出了问题的范围,应该在任何好的项目中完成。但如果有要求,我也可以提供答案。 –

+1

我已经添加了如何防止多个请求被触发,而不会干扰可能来自其他函数的并发Ajax请求,即使这是非常基本的。 –

11

快速谷歌搜索get percentage scrolled down带来了this page作为第一个结果(与下面的代码,或多或少做你想要的)。我感觉你在问这里之前没有尝试过任何研究。

$(document).scroll(function(e){ 

    // grab the scroll amount and the window height 
    var scrollAmount = $(window).scrollTop(); 
    var documentHeight = $(document).height(); 

    // calculate the percentage the user has scrolled down the page 
    var scrollPercent = (scrollAmount/documentHeight) * 100; 

    if(scrollPercent > 50) { 
     // run a function called doSomething 
     doSomething(); 
    } 

    function doSomething() { 

     // do something when a user gets 50% of the way down my page 

    } 

});