如何在Rails中实现无限滚动

时间:2019-05-05 17:00:00

标签: javascript jquery html css ruby-on-rails

您好,我正在使用ruby-2.2.2和rails 4进行ROR项目。我已经在网页中实现了到特定区域(div特定)的无限滚动,并且可以正常工作,但是每当进行水平滚动时通过增加表格的宽度或增加表格内的“ td”的数量将其分配给该div,它将在一次滚动中发送对同一页面的多个请求。

html page:
<div class="ibox-content" style="height: 450px;overflow-y: scroll;" id="user_mangmnet_scroll_div">
  <table class="table table-hover">
    <thead>
    <tr>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Address</th>
      <th>Zipcode</th>
      <th>Phone Number</th>
      <th>Email</th>
      <th>User Type</th>
      <th>Actions</th>
    </tr>
    </thead>
    <tbody id="user_management_container">
      <%= render 'dashboard/dashboards/admin/user_managment.html.erb' %>
    </tbody>
  </table>
</div>
<div id="user-pagination-container">
  <%= will_paginate @user_registered %>
</div>

jQuery:

$(document).ready(function() {
    if ($('#user-pagination-container .pagination').length) {
      $('#user_mangmnet_scroll_div').scroll(function() {
        var url = $('#user-pagination-container .pagination .next_page').attr('href');
        if(url && ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight)) {
          return $.getScript(url);
        }

      });
      return $('#user_mangmnet_scroll_div').scroll();
    }
  });

问题是,每当我向div添加水平滚动时,它都会在单个滚动上发送同一页面的多个请求。

请提前帮助:)

1 个答案:

答案 0 :(得分:0)

我认为您需要在此找到我为您找到的答案: Is there a vertical scroll event in jQuery

您检查滚动是否垂直,然后才调用操作。

复制-粘贴

var prevTop = 0;
$(document).scroll( function(evt) {
    var currentTop = $(this).scrollTop();
    if(prevTop !== currentTop) {
        prevTop = currentTop;
        console.log("I scrolled vertically.");
    }
});

并使您的代码类似:

$(document).ready(function() {
    var prevTop = 0;
    var currentTop = 0;
    if ($('#user-pagination-container .pagination').length) {
      $('#user_mangmnet_scroll_div').scroll(function() {

        currentTop = $(this).scrollTop();
        if(prevTop !== currentTop) {
           prevTop = currentTop
        var url = $('#user-pagination-container .pagination .next_page').attr('href');
        if(url && ($(this).scrollTop() + $(this).innerHeight() >= $(this)[0].scrollHeight)) {
          return $.getScript(url);
        }

        } // end of checking if prevTop!==currentTop
      });
      return $('#user_mangmnet_scroll_div').scroll();
    }
  });

我没有检查它是否有效。我也不知道你为什么返回

$('#user_mangmnet_scroll_div').scroll(); in if statement...