簡體   English   中英

jQuery Infinite Scroll的加載觸發得太早

[英]jQuery Infinite Scroll's loading fires too early

我試圖實現jQuery Infinite Scroll 但是裝載起火還為時過早。 首先,即使我僅滾動頁面1個像素,它也會觸發。 然后,它仍然會在我將頁面滾動到底部之前觸發。

首先,我進行Ajax調用以填寫第一頁。 然后,我初始化無限滾動。 如下。

$.ajax({
    url      : 'data/page1.html',
    cache    :  true,
    dataType : 'html',
    success  :  function(newElements) {
        $('#container')
            .append(newElements)
            .infinitescroll({
                 // -- selector for: --
                 navSelector  : '#pagenav', // the paged navigation 
                 nextSelector : '#pagenav', // the NEXT link (to page 2)
                 itemSelector : '.item',    // all items you'll retrieve
                 // --
                 loading      :  { 
                     finishedMsg: 'No more items to load', 
                     img: 'images/ajax-loading.gif' 
                 }
            });
    }
});

我已在此處簡化了文件以進行演示。

編輯: 在Plunker上的演示

在檢查了源代碼之后,我在第423行發現加載與導航位置有關。 然后我意識到我通過設置display: none;隱藏導航display: none; 在我的CSS中導致腳本無法正確計算導航位置。 刪除display: none; ,問題已解決。

感謝所有試圖幫助我的人。

嘗試這個

$(document).ready(function() {
  $.ajax({
    url: "data/page1.html",
    cache: true,
    dataType: "html",
    success: function(newElements) {
      setTimeout((function() {
        $("#container").append(newElements).infinitescroll({
          navSelector: "#pagenav",
          nextSelector: "#pagenav",
          itemSelector: ".item",
          loading: {
            finishedMsg: "No more items to load",
            img: "images/ajax-loading.gif"
          }
        });
      }), 5000);
    }
  });

});

我在尋找無限滾動插件時遇到了同樣的問題,因此最終使用了Endless Scroll

關於此插件的好處是,您可以定義選項,例如“ bottomPixels”,如以下示例所示:

$(document).endlessScroll({
    bottomPixels: 300,
    fireDelay: 200,
    callback: function() {
        if ($('#table').length > 0 && !loadedAllEntries && !loadPending) {
            loadEntries($('#table tbody tr').size());
        }
    },
    ceaseFire: function() {
        if (loadedAllEntries) 
            return 1;

        if ($('#table').length === 0)
            return 2;
    }
});

我在每個請求的開始都將loadPending設置為true,以便在每個給定時刻只有一個請求處於活動狀態。 希望這可以幫助。

像這樣嘗試

$(document).ready(function() {

  $('#container').infinitescroll({
    dataType: 'html',
    appendCallback: false,
    navSelector: '#pagenav', // selector for the paged navigation 
    nextSelector: '#pagenav', // selector for the NEXT link (to page 2)
    itemSelector: '.item',
    pixelsFromNavToBottom: 50
  });

});

Plunker

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM