如何修复无限滚动表?

时间:2018-02-07 03:59:59

标签: javascript jquery json

我正在努力构建一个无限滚动表,其中填充了json-server创建的fakejs用户名,电子邮件和地址数据。我希望每页显示50个数据点,然后当向下滚动到页面末尾时,将加载另外50个数据点。我怎样才能做到这一点?我看到我的代码到目前为止没有工作,因为当我向下滚动时,它没有加载另一批数据......

$(document).ready(function() {
  var currentPageNumber = 1;
  loadData(currentPageNumber);
  if($(window).scrollTop() == $(document).height() -           $(window).height()){  
      currentPageNumber +=1;
    loadData(currentPageNumber);
    }
});
function loadData(currentPage){
  $.ajax({
      method: "get",
      url: "http://localhost:3000/users?_page="+currentPage +"&_limit=50",
      dataType: 'json',
      success: function(data) {
              for(var i=0;i<data.length;i++) {
                 $('#tbl tbody').append("<tr><td>"+ data[i].name+"</td><td>"+ 
                 data[i].email+"</td><td>" 
                 + data[i].city + "," + data[i].country+ "</td></tr>")
              }; 


      },
      error: function(data) {
              console.log("Something went wrong!");
      }
})
}
table {width:100%; border-collapse: collapse; }
td, th { border: 1px solid black; }
tr { background: #ccc; }
tr:nth-child(odd) { background: #eee; }
td > div { white-space: pre; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h1>Infinite Scrolling</h1>

<table id="tbl">
  <thead>
    <tr>
      <td>Name</td>
      <td>Email Address</td>
      <td>Physical Address</td>
    </tr>
  </thead>
  <tbody>
  </tbody>
</table>

3 个答案:

答案 0 :(得分:1)

您可以根据沮丧和限制限制数据库中的数据选择。 看看Retrieving data from inner join using LIMIT and OFFSET

第一次调用loadData(currentPageNumber);后发生loadData(currentPageNumber);scroll()事件,以便首次加载时加载数据,并在用户滚动到结尾时调用loadData(currentPageNumber);页。

$(document).ready(function() {
    var currentPageNumber = 1;
    loadData(currentPageNumber);
    
    
                    $(window).on("scroll", function () {
                        var scrollHeight = $(document).height();
                        var scrollPosition = $(window).height() + $(window).scrollTop();
                        if ((scrollHeight - scrollPosition) / scrollHeight === 0) {
                        currentPageNumber +=1;
                        	loadData(currentPageNumber);
                        }
                    });
    
    function loadData(currentPage){
        $.ajax({
            method: "get",
            url: "http://localhost:3000/users?_page="+currentPage,
            dataType: 'json',
            success: function(data) {
                    for(var i=0;i<data.length;i++) {
                       $('#tbl tbody').append("<tr><td>"+ data[i].name+"</td><td>"+ 
                       data[i].email+"</td><td>" 
                       + data[i].city + "," + data[i].country+ "</td></tr>")
                    }; 


            },
            error: function(data) {
                    console.log("Something went wrong!");
            }
    })
    }

})


<head>
    <title>Infinite Scroll Table</title>
    <style>

        table { border-collapse: collapse; }
        td, th { border: 1px solid black; }
        tr { background: #ccc; }
        tr:nth-child(odd) { background: #eee; }
        td > div { white-space: pre; }
    </style>

</head>
<body>
        <h1>Infinite Scrolling</h1>

        <table id="tbl">
                <thead>
                    <tr>

                                <td>Name</td>
                                <td>Email Address</td>
                                <td>Physical Address</td>


                    </tr>
                </thead>
                <tbody></tbody>
        </table>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        <script src="table.js"></script>         
</body>

答案 1 :(得分:0)

您的代码仅在加载文档时检查一次。每次滚动时都必须检查并加载数据,因此应将其绑定到滚动事件。

$(document).ready(function() {
    var currentPageNumber = 1;
    loadData(currentPageNumber);
    $(document).on("scroll", function() {
         if($(window).height() + $(window).scrollTop() > $('body').height() - $(window).height() / 2){
             currentPageNumber +=1;
             loadData(currentPageNumber);
         }
    }
    //your loadData function
 })

答案 2 :(得分:0)

它不会运行,因为您只调用一次检查位置。 要使其运行,您应该跟踪鼠标的滚动事件,例如:

    $(document).ready(function() {
      var currentPageNumber = 1;
      loadData(currentPageNumber);
      $(window).scroll(function() {
        if($(window).scrollTop() + $(window).height() ==  $(document).height()) {
          loadData(currentPageNumber);
        }
      });

     function loadData(currentPage){
        console.log("test");
      }

   })