2017-09-07 86 views
0

我有一些函數,它檢查用戶是否滾動到頁面的底部,如果是,則運行ajax並將結果的一部分添加到當前頁面。 這個效果很好,但是如果我將添加負數來更快地啓動此函數,getData()函數會運行很多次,並且所有代碼都會變得異常 - 您可以向上滾動一個像素,然後再次運行。在沒有偏移量的工作版本下面,下一個偏移量對我來說更好,因爲函數早期啓動,但是多次加載getData(),這是錯誤的。使用偏移量滾動到頁面的底部 - 函數運行多次

我想到一些解決方案與國旗 - 真/假,但我不知道如何做到這一點。

$(window).scroll(function() { 
    if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) { 
    console.log(counter) 
    if (counter > sum) { 
     return false; 
    } else { 
     getData(counter); 
     counter++; 
    } 
    } 
}); 

$(window).scroll(function() { 
    if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight - 300) { 
    console.log(counter) 
    if (counter > sum) { 
     return false; 
    } else { 
     getData(counter); 
     counter++; 
     //$(window).unbind('scroll'); 
    } 
    } 
}); 
+2

搜索「滾動防抖動」 – mplungjan

+1

只給多一點信息,在'scroll'事件觸發每滾動像素一次。您需要改爲只執行一次滾動停止N毫秒的邏輯 - 這是反彈,因爲@ mplungjan指的是 –

+1

https://stackoverflow.com/questions/36415992/debounce-jquery-scroll-events – mplungjan

回答

0

謝謝你去抖動提示。 感謝這一點,我能夠解決我的代碼,現在所有的作品。 下面的例子:

$(window).scroll(function() { 
    var timer; 
    if (timer) { 
    window.clearTimeout(timer); 
    } 
    timer = window.setTimeout(function() { 
    if ($(window).scrollTop() >= $(document).height() - $(window).height() - 500) { 
     console.log(counter) 
     if (counter > sum) { 
     return false; 
     } else { 
     getData(counter); 
     counter++; 
     } 
    } 
    }, 200); 
});