0

我找到了一个不错的 ajax/jquery 无限滚动插件(http://hycus.com/2011/03/15/infinite-scrolling-like-new-twitter-with-php-mysql-jquery/),我能够塑造我的内容很好,但我遇到了一个问题——它只调用了一次 loadmore.php 脚本。让我展示一下代码:

在我的 index.php 文件中:

<script type="text/javascript">
    $(window).scroll(function(){
        if($(window).scrollTop() == $(document).height() - $(window).height()){
            $('div#loadmoreajaxloader').show();
            $.ajax({
                url: "loadmore.php?lastid=" + $(".postitem:last").attr("id"),
                success: function(html){
                    if(html){
                        $("#postswrapper").append(html);
                        $('div#loadmoreajaxloader').hide();
                    }else{
                        $('div#loadmoreajaxloader').html('<center>No more posts to show.</center>');
                    }
                }
            });
        }
    });
</script>

这部分调用我的 loadmore.php 文件并将最后一篇文章的 id 发送给它。这仅在我第一次滚动到页面底部时有效,它从 loadmore.php 加载条目,但不会再次调用 loadmore.php。我的 loadmore.php 文件有以下代码:

<?php

include('./includes/config.php');

if($_GET['lastid']){
    $query = 'SELECT * FROM db WHERE id < "'.$_GET['lastid'].'" ORDER BY id DESC LIMIT 0,3';
    $result = mysql_query($query);
    while ($rec = mysql_fetch_object($result)) {

    [SET MY VARS]

    ?>

    [HTML & PHP DISPLAYING MY POST]

    <?php
    }
}

?>

在第一次 ajax 调用之后显示的 3 个帖子完美出现,正是我希望它们显示正确数据的方式。但是在前 3 个帖子出现后,我无法让接下来的 3 个帖子出现。

因此,如果我的 index.php 上默认有 5 个帖子,我滚动到底部,ajax 调用另外 3 个帖子,它们显示完美,但之后没有任何显示,即使还有很多帖子要显示。我的问题在哪里,ajax/jquery 向导?

4

2 回答 2

2

上面带有以下模块的代码示例是否可以在距底部固定高度触发该功能?

添加:

var trigger = $('#postswrapper').height() - 250;

并改变:

if (st >= 0.7*h && !loading && h > 500) {

到:

if ((st == trigger) && (!loading) && (h > 500)) {
于 2012-10-21T22:02:49.683 回答
1

您的“如果”条件仅在您第一次滚动时才满足。所以本质上,事件被触发,不是当你滚动到页面底部时,而是当你开始滚动时。将您的代码替换为以下内容:

<script type="text/javascript">
    var loading = false;

    $(window).scroll(function(){
        var h = $('#postswrapper').height();
        var st = $(window).scrollTop();

         // the following tests to check if 
         // 1. the scrollTop is at least at 70% of the height of the div, and 
         // 2. another request to the ajax is not already running and 
         // 3. the height of the div is at least 500. 
         // You may have to tweak these values to work for you. 
        if(st >= 0.7*h && !loading && h > 500){
            loading = true;
            $('div#loadmoreajaxloader').show();
            $.ajax({
                url: "loadmore.php?lastid=" + $(".postitem:last").attr("id"),
                success: function(html){
                    if(html){
                        $("#postswrapper").append(html);
                        $('div#loadmoreajaxloader').hide();
                    }else{
                        $('div#loadmoreajaxloader').html('<center>No more posts to show.</center>');
                    }
                    loading = false;
                }
            });
        }
    });
</script>
于 2011-09-20T22:46:19.763 回答