【问题标题】:Load more to infifnite scrolling using jQuery and php使用 jQuery 和 php 加载更多到无限滚动
【发布时间】:2017-05-15 12:05:22
【问题描述】:

最近我使用 php 和 jquery 开发了一个加载更多的功能。请看我的代码

HTML

<div class="container clearfix product-output">

</div>

jQuery

$.ajax({
    method: "POST",
    url: "result.php",
    data: { keyword:"all"}
}).done(function( msg ) {
    $( ".product-output" ).html(msg);
    $(".load-more").on("click",function(){
        var load_num= $('.load-more').length;
        var appear=[];
        $(".im-product-block").each(function(){
            appear.push($(this).attr('id'));
        });
        $.ajax({
            method: "POST",
            url: "result.php",
            data: { keyword: "all", y_id: appear, load_num: load_num }
        }).done(function(msg1){
            $('.load-more-div').before(msg1);
            if($(".hide-load").val()==1){
                $(".load-more").hide();
            }
        });

    });
});

result .php我写了数据库连接代码和下面的查询。

$query = 'SELECT * FROM `product` ORDER BY id DESC  LIMIT 15';
$query_1 = 'SELECT * FROM `product` ORDER BY id DESC';

if (ISSET($_POST['y_id'])) {
    $appear = implode("', '", $_POST['y_id']);
    $query = "SELECT * FROM `product` WHERE id NOT IN('{$appear}')  ORDER BY id DESC  LIMIT 15";
    $query_1 = "SELECT * FROM `product` WHERE id NOT IN('{$appear}') ORDER BY id DESC";
}
$result = $conn->query($query);
$result_1 = $conn->query($query_1);
$total_num = $result_1->num_rows;
echo '<div class="container clearfix product-output">';

if ($result->num_rows > 0) {

    while ($row = $result->fetch_assoc()) { ?>

        <div class="col-sm-2 im-product-block" id="<?php echo $row["id"]; ?>">

            <p class="product-name"> <?php echo $row["name"]; ?></p></div>

    <?php }
    echo '</div>';

    if ($total_num > 15 && $_POST[load_num] == 0) {
        echo '<div class="load-more-div"><p class="load-more"> Load More</p></div>';
    }
    if ($total_num < 15) {
        echo '<input type="hidden" name="hide-load" class="hide-load" value="1">
<div class="load-finished"><p class="load-f"> All Products Loaded Successfully</p></div>';
    }

}

所有这些功能都运行良好。但不是点击加载更多按钮,当用户向下滚动加载更多时,它需要自动获取产品而不点击。

为此我使用以下代码

$(window).scroll(function() {
    var hT = $(".load-more").offset().top,
        hH = $(".load-more").outerHeight(),
        wH = $(window).height(),
        wS = $(this).scrollTop();
    if (wS > (hT+hH-wH)){
        $(".load-more").trigger("click");
    }
});

但是这里的执行是无限的。它没有停止。请检查此代码并提出一个好的方法

【问题讨论】:

  • 您在哪里放置了更多代码。我的问题类似,但不知道在哪里放置答案。谢谢你。请帮忙
  • 请仔细阅读这一行 if ($total_num > 15 && $_POST[load_num] == 0) { echo '

    加载更多

    '; } if ($total_num

    所有产品加载成功

    '; }
  • 感谢您的回复。我在问你接受的答案放在哪里。请问你是怎么换的。再次感谢您的回复
  • 您是如何将您接受的答案与上面的代码集成以使用 ajax。我有更多手动工作的负载,但希望在滚动时自动执行
  • 您能否将 $(".load-more").on("click",function(){ ... } 替换为选定的答案。

标签: javascript php jquery function pagination


【解决方案1】:

我认为您需要在进行 ajax 调用并将其写入页面时停止执行加载。也许设置一个布尔变量来决定是否需要加载更多。

例如

var canLoad = true;

$(window).scroll(function() {
    var hT = $(".load-more").offset().top,
        hH = $(".load-more").outerHeight(),
        wH = $(window).height(),
        wS = $(this).scrollTop();
    if (wS > (hT+hH-wH) && canLoad){
        canLoad = false;
        $(".load-more").trigger("click");
    }
});

在 ajax 函数完成并加载数据后,将 canLoad 设置回 true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多