【问题标题】:JQuery Infinite Scroll - "load more" after max page limit reachedJQuery Infinite Scroll - 达到最大页面限制后“加载更多”
【发布时间】:2014-01-28 13:23:51
【问题描述】:

我正在使用这个无限滚动插件:https://github.com/paulirish/infinite-scroll 但由于我有很多页面并且浏览器由于内存问题而崩溃,我想在无限滚动这么多页面后实现一个“加载更多”按钮像谷歌图片、Twitter 和其他应用程序。

因此,当当前页面到达maxPage 时,我需要停止无限滚动,并允许用户选择“加载更多”按钮。希望能解决内存问题。

我知道其他插件可以做到这一点,但我没有更改插件的选项,因此需要能够为达到 maxPage 限制时创建自定义函数。这在下面的链接中进行了讨论,但我找不到任何关于如何准确执行此操作的更多文档。

https://github.com/paulirish/infinite-scroll/issues/300

我根据文档尝试了以下代码。加载图像在每个页面滚动到末尾时开始,然后在到达第 5 页时显示“加载更多”消息,但警报(“加载更多”);在每一页上激活,而不是在最后一页上激活。当达到 maxpage 时,谁能建议我需要做什么来创建自定义函数?或任何其他解决内存问题的方法?

    // Infinite Ajax Scroll configuration
    $container.infinitescroll({
        navSelector: "div.paginate",
        nextSelector: "div.paginate a",
        itemSelector: "div.element",
        maxPage: 5,
        loading: {
          finishedMsg: 'Load More',
          msgText: " ",
          img: 'public/img/ajax-loader.gif',
          finished: function(){
               alert('finished');
          }

        }
    },
    function(newElements) {

        var $newElements = $(newElements).css({opacity: 0});
        //remove the first item
        $newElements.splice(0, 1);

        $container.isotope('appended', $newElements);

    }

});

PS。另一个帖子属于我:jquery infinite scroll plugin - loading and memory issues,与我前几天悬赏的问题相同,所以如果你能解决这个问题,我也会奖励你;)

【问题讨论】:

  • +1 .. 我需要实际的 javascript 来为 Tumblr 提供无限滚动工具
  • 你可以从这里下载它:github.com/paulirish/infinite-scroll,但是文档不是很好......因此我为什么这么卡住:-/
  • 非常感谢!我从来没有找到要嵌入的原始 JS —— 只是指向其他人网站的链接,这些网站总是在某个随机点死掉并破坏我的页面 >_> 祝你好运。
  • 没有问题,希望你能成功

标签: javascript jquery infinite-scroll


【解决方案1】:

看插件代码,_showdonemsg中的这一行:

// user provided callback when done
opts.errorCallback.call($(opts.contentSelector)[0],'done');

似乎表明达到最大值时会调用errorCallback。 也许您可以使用它来删除以前的 DOM 内容,然后继续滚动。

【讨论】:

  • 我试过删除以前的页面,但它会导致问题留下空白并导致 scoll 栏出现奇怪的行为,所以我的结论只是在达到 maxPage 后向所有后续页面添加更多按钮。但是,我不知道如何实现。
  • 当达到最大值时显示“加载旧页面”消息然后加载整个页面并将state.currPage设置为maxPage怎么样?
  • 我只想要加载更多按钮。我已经在很多网站上看到了这个工作,并且知道它在其他无限滚动插件上实现,所以它必须相对容易实现
  • 我不认为这个特定的插件可以在不做一些修改的情况下解决你的问题。您似乎希望在达到 maxPage 后将自动加载系统更改为手动加载系统。我也看不出这对记忆问题有什么帮助。
【解决方案2】:

尝试像这样更改您的代码,以便每次加载内容时增加一个计数器,并在添加更多内容之前检查该计数器是否未达到特定值。

var cLoaded = 0, iMyLoadLimit = 5;

    // Infinite Ajax Scroll configuration
    $container.infinitescroll({
        navSelector: "div.paginate",
        nextSelector: "div.paginate a",
        itemSelector: "div.element",
        maxPage: 5,
        loading: {
          finishedMsg: 'Load More',
          msgText: " ",
          img: 'public/img/ajax-loader.gif',
          finished: function(){
               alert('finished');
          }

        }
    },
    function(newElements) {
        if(cLoaded < iMyLoadLimit){

            var $newElements = $(newElements).css({opacity: 0});
            //remove the first item
            $newElements.splice(0, 1);

            $container.isotope('appended', $newElements);
        }
        cLoaded++;
    }

});

【讨论】:

  • 它是无限滚动初始化的一部分,因此您可以在输出之前操作返回的内容。所以我基本上得到了新元素并使用同位素添加到屏幕上。在文档中,它显示了如何做到这一点:github.com/paulirish/infinite-scroll#loading-json-datagithub.com/paulirish/infinite-scroll/issues/300
  • 好的,我真的不需要完成的功能或'maxPage'选项设置吗?我假设您建议我将更多按钮等的所有代码添加到回调函数中?这是有道理的,但是问题只能解决一半,因为当我添加代码以显示更多按钮时,会发生什么来帮助解决内存问题?我会重置整个事情吗?
  • 如果您不断地向 DOM 添加内容,您将慢慢解决内存问题(当然,这在您加载的内容上会有很大差异)。你如何处理这是一个单独的问题,也是使用无限滚动的一个缺点。您可能会拼接很久以前加载的内容(所以当添加新内容时,旧内容就会消失),将 DOM 保持在一个粗略的最大值。
  • 好的,所以我错误地认为加载更多按钮是解决方案?在阅读了文档和讨论后,我发布了指向 (github.com/paulirish/infinite-scroll/issues/300) 的链接,看起来好像用一个更多按钮实现 th 'maxPage' 是答案,我的问题是询问如何实际实施他们讨论的解决方案......
  • 我设法通过根据您的建议进行扩展来使其工作。谢谢
猜你喜欢
  • 2012-12-03
  • 2019-08-09
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-01-13
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多