jQuery Infinite Scroll-当滚动速度很快时,事件会触发多次

jQuery Infinite Scroll-当滚动速度很快时,事件会触发多次,jquery,infinite-scroll,Jquery,Infinite Scroll,好的,下面的代码“起作用”,当您滚动到页面底部时,将启动AJAX函数,并将结果附加到页面上的#postswraper div 问题是:如果我在到达页面底部时快速滚动,AJAX会触发几次并将几组结果加载到#postswraper div中(额外的“不想要的”结果的数量取决于快速滚动触发的额外滚动事件的数量) 最终,每次用户到达底部时,我只需要提供一组结果。我试过添加计时器之类的东西,但没有用。它显然是在DOM中存储额外的滚动动作,然后按顺序启动它们 有什么想法吗 我正在使用jquery.1.4.4

好的,下面的代码“起作用”,当您滚动到页面底部时,将启动AJAX函数,并将结果附加到页面上的#postswraper div

问题是:如果我在到达页面底部时快速滚动,AJAX会触发几次并将几组结果加载到#postswraper div中(额外的“不想要的”结果的数量取决于快速滚动触发的额外滚动事件的数量)

最终,每次用户到达底部时,我只需要提供一组结果。我试过添加计时器之类的东西,但没有用。它显然是在DOM中存储额外的滚动动作,然后按顺序启动它们

有什么想法吗

我正在使用jquery.1.4.4.js,如果这对任何人都有帮助的话。在这种情况下,e.preventDefault()无论如何都不起作用

$(window).scroll(function(e) {
    e.preventDefault();
    if ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
        $('div#loadmoreajaxloader').show();
        $.ajax({
            cache: false,
            url: 'loadmore.php?lastid=' + $('.postitem:last').attr('id'),
            success: function(html) {
                if (html) {
                    $('#postswrapper').append(html);
                    $('div#loadmoreajaxloader').hide();
                } else {
                    $('div#loadmoreajaxloader').html();
                }
            }
        });
    }
});

尝试存储某种类型的数据,以存储页面当前是否正在加载新项目。也许是这样:

$(window).data('ajaxready', true).scroll(function(e) {
    if ($(window).data('ajaxready') == false) return;

    if ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
        $('div#loadmoreajaxloader').show();
        $(window).data('ajaxready', false);
        $.ajax({
            cache: false,
            url: 'loadmore.php?lastid=' + $('.postitem:last').attr('id'),
            success: function(html) {
                if (html) {
                    $('#postswrapper').append(html);
                    $('div#loadmoreajaxloader').hide();
                } else {
                    $('div#loadmoreajaxloader').html();
                }
                $(window).data('ajaxready', true);
            }
        });
    }
});

在发送Ajax请求之前,会清除一个标志,表示文档还没有准备好接受更多Ajax请求。一旦Ajax成功完成,它会将标志设置回true,并且可以触发更多请求。

不需要的结果是“loadmore.php”脚本会在不需要时执行多次。我只需要,每当用户到达页面底部时,运行一(1)次代码块,通过loadmore.php加载适当的结果,在用户再次到达页面底部之前,不要加载任何其他内容。是的,伙计!我之前也有类似的逻辑,但你成功了。工作起来很有魅力。干杯太棒了,谢谢!我结合了问题和答案中的代码来解决同一个问题,谢谢!这太漂亮了。你也可以使用
window.whatever=true
。太棒了!一直在为类似的问题而挣扎。