如何在用户离开页面时保存无限堆栈的 AJAX 内容
How do I save an infinite stack of AJAX content when a user leaves the page?
我正在制作一个无限滚动的网站。也就是说,当用户滚动到页面底部时,会在底部附加一个新的内容块。它与Facebook非常相似。以下是加载 3 个页面的示例:
_________
| |
| 0 |
|_________|
| |
| 1 |
|_________|
| |
| 2 |
|_________|
当用户单击最后一页上的某些内容时,我会将他们带到单独的详细信息页面。但是,如果用户单击返回搜索结果页面,则我无法记住他们之前的位置,必须再次加载页面 0。
_________
| |
| 0 |
|_________|
我知道一些老派的方法可以解决这个问题,但它们都有一些严重的问题:
哈希网址
每次加载新页面时,我都可以更新URL。例如:www.website.com/page#2。当用户转到详细信息页面并返回时,URL 会告诉我上次加载的页面,因此我为他加载它:
_________
| |
| 2 |
|_________|
但这是糟糕的用户体验。仅加载第 2 页。用户无法向上滚动以查看较旧的内容。我不能只加载第 0、1 和 2 页,因为这会使服务器过载,考虑到后退按钮占 Web 流量的 50%(Jacob Nielsen 研究)。
本地存储
Cookie 没有存储多页数据的存储容量。本地存储应有足够的空间。一个想法是将所有加载的页面存储到本地存储中。当用户返回到搜索结果时,我从本地存储加载,而不是命中服务器。这种方法的问题在于,我的很大一部分用户使用的是不支持本地存储(IE7)的浏览器。
用户完全带到单独的详细信息页面,不如隐藏主要滚动内容,通过 Ajax/XMLHttpRequest()
加载详细信息内容,然后使该内容可见?换句话说,就像Facebook是如何做到的。我想你是否能做到这一点取决于内容是什么,它是你正在设计和控制的东西,还是外部的东西。
鉴于您问题的限制,我能想到的唯一合理的解决方案是缓存前几页的高度,然后在用户向上滚动时加载它们。这将填充您的向上滚动,并允许您在用户向上查找时触发加载。此外,如果您想更花哨一点,我会尝试找出一种冻结滚动条的方法,以防止用户向上滚动超过上一个卸载的页面。这样,他们将无法一次触发多个页面加载。
- 结合jQuery和jetpack无限滚动
- 如何将getJson的响应保存在全局变量中
- 按下按钮时保存cookie
- 如何使用 Angular JS 将数据保存在数据库中
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- HTML5在画布中加载较小的图像并保存实际大小的图像
- ng应用程序使脚本无限运行
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 如何将多个画布保存为一个图像
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 如何将乳胶配方奶粉图像保存到Asp.net中的文件夹中
- 保存数组javascript
- 保存串行端口列表与流星
- 将JavaScript变量保存到Rails模型
- Java脚本将URL转换为已保存的URL时出错
- JavaScript 素数搜索无限递归
- jquery/ajax无限滚动事件
- 刷新jqGrid;t在启用无限滚动的情况下保存当前页面位置
- 如何在用户离开页面时保存无限堆栈的 AJAX 内容
- 同时异步保存到铬无限存储