我不了解backbone.js
1,但我曾帮助开发过一个移动应用程序,需要在html5中实现这个行为,所以我应该能够给出一些好的建议:
首先要知道
history.pushState
函数的存在。但它的问题是
它支持Android 2.3,但不支持Android 3到Android 4.0.3。正如kiranvj正确指出的那样,可以使用流行的
history.js库来提供缺少历史功能的polyfill解决方案。
现在,针对您实际的问题,我实现历史方向动画的方法是通过向
pushState
函数添加数据(
history.pushState(data,title,url)
)来确定页面的逻辑位置。在我的应用程序中,我不仅限于水平栏,但在您的情况下,您将跟踪任何新加载的页面的位置,其位置比当前页面高1。例如:
History.pushState({position:History.getState().data.position+1},"Your title","Your URL")
接下来,当
window.onstatechange
或
window.onanchorchange
事件触发时,您需要观察位置是否比当前页面高或低(例如,通过使用
history.js中我上面使用的
History.getState()
函数),并根据此决定向哪个方向移动(较低的向左移动,较高的向右移动),如下图所示:
![Illustration of history events](https://istack.dev59.com/Cwcwk.webp)
您还会注意到,我在第一页上已经假设您的位置是
{position:1}
,而通常第一页不会有状态信息。实现这一点的方法是使用
history.replaceState
将当前空状态替换为更详细的状态。或者,您也可以在任何先前提到的事件中检查空状态,如果为空,则认为它是最左边的一个(
{position:1}
)。
希望这能帮到您,如果您有任何其他问题,请随时问。
请注意,此答案假定您正在使用
history.js,如果您想构建自己的解决方案,则需要监听略有不同的事件(例如
onpopstate
)并使用略有不同的结构(
history
而不是
History
)。
值得注意的是,你也可以使用自己的队列数组来构建它,这样可以更加灵活地控制,但与浏览器的后退按钮不兼容。对于浏览器站点来说,这是一个很大的问题,但如果你正在构建一个
cordova(又名
phonegap) Web应用程序,则会更加容易。
1 只是阅读了一些相关资料,似乎该技术会有一些自己的历史处理方式, 这可能会使其整合上述描述的技术变得更加复杂。
router.navigate()
,但是当每个页面更改时,我有一个自定义事件被触发。也没有定义页面的顺序。 - alex