【问题标题】:Javascript "infinite" scrolling for finite content?Javascript“无限”滚动有限内容?
【发布时间】:2012-10-31 09:22:41
【问题描述】:

我有很多内容要显示在网站上,因此我需要使用“无限”滚动解决方案,在用户滚动到当前加载内容的末尾时加载内容。但是,我确切地知道有多少数据,我希望用户对此有所了解。我不喜欢滚动条如何让您看起来快到内容的末尾,然后突然加载了更多内容并且拇指/滑块位于滚动轨道的中间并且变窄了。

我计划的解决方案是在当前内容巨大但为空的内容之后创建一个 div,然后在我加载更多内容时将其缩小。有更好的想法吗?

【问题讨论】:

  • 现在有大量的插件,只有谷歌。通常它像 FaceBook 一样完成,当用户滚动到底部时,ajax 调用会抓取接下来的内容并将其发布在正文的底部
  • "我不喜欢滚动条让它看起来好像你快到了内容的结尾,然后突然加载了更多的内容并且拇指/滑块在中间滚动轨道变窄。”完全同意。
  • +1。我建议查看User Experience 以了解更多关于此的见解。
  • 或者你可以让你的滚动 div 变大,overflow:scrolley,底部为空。
  • 为什么不让包含内容的div有一个min-height,然后如果内容溢出,它会自动展开... 也避免了必须在下面调整div的大小,并且是纯 CSS 解决方案!

标签: javascript jquery scroll infinite-scroll


【解决方案1】:

当您设计一个 UI 元素时,您首先要问的是您希望最终用户实际体验什么。您的解决方案将使它看起来像大量尚未存在的数据(如果它是较旧/存档的东西,它可能与用户无关)。这可能会使用户完全无法阅读内容,因为它看起来太长了。

问题是滚动条不是为支持扩展内容而设计的。正如您所指出的,它对此类内容具有欺骗性。你可以设计一个全新的滚动功能来提供完整的信息

  1. 加载数据的长度
  2. 可用的已卸载数据的长度
  3. 如果您下载存档数据,您可能需要单独指出加载数据的哪一部分是当前数据

带有绿色背景的彩色滚动条指示已加载和当前的内容,黄色部分指示已加载但较旧的数据,红色部分指示用户滚动时可以下载的内容会很好地做到这一点。

【讨论】:

  • 是的,但是您认为如何制作自定义滚动条?
  • 实施不是问题的一部分;-D。最简单的方法是 flash/silverlight/java。在普通的 js/html/css 中,您可能需要将滚动条元素创建为 div 并以编程方式跟踪/调整整个内容。
  • 好的,我想我只是对这个问题的解释不同! +1!
【解决方案2】:

我的最终解决方案是在具有滚动条的 div 中创建一个表格。我将表格的高度设置为内容总量的高度,第一行设置为没有被查看的部分内容的高度,下一行是当前正在查看的内容。

然后我使用了一个与横向滚动视频游戏中使用的过程非常相似的过程,您只绘制屏幕上可见的内容,或者只绘制可见区域附近的内容。我利用航路点来跟踪用户滚动到的位置,然后刷新可见内容并使用 jquery scrollto 功能将用户保持在他们正在查看的同一位置。因此,在任何时候,只有大约一页的内容会“显示”在当前查看区域的上方或下方。

我应该注意到所有“内容”实际上已经在客户端的系统上,所以下载不是问题。对我来说,问题是“内容”是一个庞大的 DOM 结构,如果我尝试一次处理所有内容,最终会严重降低客户端系统的速度。所以我一次只创建和显示其中的一部分。

如果您决定抓住滚动条并将其拖动到内容的底部,这确实会导致屏幕刷新时出现一些不稳定和糟糕的情况。如果我发现更好的东西,我会更新这个。

更新 我在我的网站上记录了如何做到这一点:http://0xdabbad00.com/2012/11/25/icebuddha-scrolling-javascript-infinite-scrolling-in-a-finite-area/

【讨论】:

  • 我还没有查看您的解决方案,但是 +1 用于自己解决、记录并分享您的解决方案!
【解决方案3】:

您可以在最大化文档的最后插入一个不显眼的字符(例如 15k 像素),这样滚动条就可以准确地反映页面的深度(如果这是您的意思)。像这样的……

 document.write('<div style="Position:Absolute; Left:0px; Top:15000px;";>.</div>');

【讨论】:

  • 虽然在概念上与我考虑的解决方案没有什么不同,但我还是决定选择这个,因为它确实改进了我最初的想法,让我免于填写垃圾数据,节省内存。
  • 不客气……最简单的解决方案永远是最好的! :)
猜你喜欢
  • 2020-03-09
  • 2021-10-15
  • 2014-07-20
  • 2014-05-25
  • 1970-01-01
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多