微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

jQuery无限滚动 – 滚动快速时多次触发

好的,下面的代码“工作”,当你滚动到页面底部,AJAX函数被触发,结果附加到页面上的#postswrapper div。

问题是:如果我在页面底部快速滚动,AJAX会触发几次,并将多组结果加载到#postswrapper 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,success: function(html) {
                if (html) {
                    $('#postswrapper').append(html);
                    $('div#loadmoreajaxloader').hide();
                } else {
                    $('div#loadmoreajaxloader').html();
                }
                $(window).data('ajaxready',true);
            }
        });
    }
});

在发送Ajax请求之前,将清除一个标志,表示文档尚未准备好进行更多Ajax请求。一旦Ajax成功完成,它将标志设置为true,并且可以触发更多的请求。

原文地址:https://www.jb51.cc/jquery/182986.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐