当用户滚动到页面末尾时使用jQuery .load()

时间:2012-05-19 09:29:14

标签: javascript jquery

当用户滚动到页面底部时,我正在使用jQuery load()来加载更多内容。这是我的剧本。

$(window).scroll(function () {
    if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
        var visible_posts = $('.post').length - 1;
        $(".posts").append('<div class="more-content-'+ visible_posts + '"></div>');
        $(".more-content-" + visible_posts).html('<div class="loading"><img src="/img/loading.gif" alt="" />');
        $(".more-content-" + visible_posts).load('<?php bloginfo('template_directory'); ?>/ajax/get_posts.php?offset=' + visible_posts);
    }
});

问题是这会产生奇怪的行为和许多加载GIF,如果用户的滚动太快了......我认为因为它会在每次加载div时附加div,即使在加载完成之前也满足条件。

问题是:

有没有办法在第一次执行后停止脚本..运行load()...然后重新启用该功能?当您想要禁用太快的点击时,类似于解除绑定的内容。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

如何在加载完成后重新启用该功能?

var canLoad = true;
$(window).scroll(function () {
    if ($(window).scrollTop() >= $(document).height() - $(window).height() && canLoad) {
        canLoad = false;
        // other stuff
        $(".more-content").load('stuff', function() {
           // re-enable scroll function
           canLoad = true;
        });
    }
});

答案 1 :(得分:0)

一旦开始加载新页面就设置一个标志,并在页面更新后取消设置。

var loadingMore = false;
$(window).scroll(function () {
    if ( !loadingMore && 
         $(window).scrollTop() >= $(document).height() - $(window).height()) {

        loadingMore = true;

        var visible_posts = $('.post').length - 1;
        $(".posts").append('<div class="more-content-'+ visible_posts + '"></div>');
        $(".more-content-" + visible_posts).html('<div class="loading"><img src="/img/loading.gif" alt="" />');
        $(".more-content-" + visible_posts)
             .load('<?php bloginfo('template_directory'); ?>/ajax/get_posts.php?offset=' + visible_posts, 
                   function(){loadingMore = false;}
                  );
    }
});

重要的是要注意,它不仅仅是多次出现的div,而是实际上是在发出多个AJAX请求。

答案 2 :(得分:0)

试试这个

var flag = true;
$(window).scroll(function () {
    if ($(window).scrollTop() >= $(document).height() - $(window).height()) {
        if(flag){
           flag = false;
           var visible_posts = $('.post').length - 1;
           $(".posts").append('<div class="more-content-'+ visible_posts + '"></div>');
           $(".more-content-" + visible_posts).html('<div class="loading"><img src="/img/loading.gif" alt="" />');
           $(".more-content-" + visible_posts).load('<?php bloginfo('template_directory'); ?>/ajax/get_posts.php?offset=' + visible_posts, function(){ 
           flag = true
          });
       }
    }
});

答案 3 :(得分:-1)

这应该有用,我还添加了评论来帮助你:

$(window).scroll(function () {
  var bload = 1; // Add a boolean var
    if ($(window).scrollTop() >= $(document).height() - $(window).height() && bload) {
      // Check in the condition to see if we load
      bload = 0; // Set the boolean to false or zero, so that we don't load anything else until the var is true again
        var visible_posts = $('.post').length - 1;
        $(".posts").append('<div class="more-content-'+ visible_posts + '"></div>');
        $(".more-content-" + visible_posts).html('<div class="loading"><img src="/img/loading.gif" alt="" />');
        $(".more-content-" + visible_posts).load('<?php bloginfo('template_directory'); ?>/ajax/get_posts.php?offset=' + visible_posts, function () {
          bload = 1; // This gets fired when the load is done, so we can load again (we set the bool to true)
        });
    }
});