2013-03-18 121 views
3

我正在使用JS,JQuery,& PHP和试图做的是解决无限滚动问题。问题是,如果您在页面上长时间滚动并使用ajax加载更多页面,请单击链接转到新页面,如何在使用浏览器时自动转到旧页面中的相同位置新页面上的后退按钮?访问另一页后保留浏览器滚动位置

。使用ajax在滚动中加载新页面。

+3

我希望Facebook能够实现这一点。 – awendt 2013-03-18 20:25:47

+1

每当你的ajax得到新的东西,你必须保存当前加载状态的会话。那么当用户访问其他站点并返回到前一个站点时,您只需加载以前的状态并滚动到它。 – ITroubs 2013-03-18 20:30:24

+0

@ITroubs有趣。因此,通过这种实施方式,您是否看到任何缺点?如果页面有10,000-15,000行html,该怎么办? – stwhite 2013-03-18 20:34:04

回答

0

我对我的问题提出的解决方案是在导航离开页面之前将每个页面与相关数据一起存储。

以下信息需要保持滚动位置:

  • 页ID(唯一页)
  • 页面数据(全部页面的HTML,小心数据过期的)
  • 分页页码(仅在此页面为供稿时适用)
  • 当前X, Ÿ滚动位置
  • 时间戳

当下次加载页面时,之前的信息可​​以使用本地存储进行存储。返回上一页时,查看存储中的PageID。如果存在,则抓住X或Y坐标并将页面移动到该位置。这需要一些策略性的思考,因为如果页面是一个惰性加载(无限滚动)类型的页面或提要,则需要让数据已经准备好根据页面的位置来查找数据。

建立此系统的最简单方法是如果您的整个网站都是基于javascript的,并且您使用的是HTML 5 History Api。防止整页重新加载可以帮助减轻服务器的重量。如果您担心在某些过期的数据上保持最新状态,您可以将页码发送到服务器,并获取相应的数据以填写过期的内容。

-1

你可以得到$(window).scrollTop();值,然后将其名称为“页首”另存为一个变量在PHP,并呼吁它回到DOM准备:

$(window).load(function() { 
    $(window).scrollTo(pageTop); 
}); 

让我知道如何继续下去。

+0

不会有帮助,如果你有一个像加载你的内容的Facebook并且用户在加载的第10步。如果你只是滚动到第10个“页面”,这将失败,因为它不存在于你的html但 – ITroubs 2013-03-18 21:14:02

+0

编辑。我认为window.load等待FB加载。试一试。 – 2013-03-18 21:15:14

+0

直到您告诉浏览器在滚动前重新加载所有动态数据,这并非有用。 – Ejzy 2013-03-18 21:18:44

相关问题