我不了解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)
) 添加数据,通过该函数我确定了页面的逻辑位置。在我的应用程序中,我不仅限于水平条,而且在您的情况下,您将跟踪任何新加载页面的位置,该位置比当前页面高一个。例如
History.pushState({position:History.getState().data.position+1},"Your title","Your URL");
接下来,当window.onstatechange
orwindow.onanchorchange
事件触发时,您观察该位置是高于还是低于当前页面(例如,通过使用我在上面使用的history.js History.getState()
函数),并根据此决定向哪个方向移动(下到左,右高),如下图所示:
您还会注意到,我已经在第一页上假设您拥有{position:1}
,而通常第一页没有状态信息。实现这一点的方法是使用history.replaceState
which 将当前的空状态替换为更具信息性的状态。或者,您也可以检查前面提到的任何事件的空状态,如果它是空的,则假设它是最左边的 ( {position:1}
)。
希望这会有所帮助,如果您有任何其他问题,请随时提出。
请注意,此答案假定您正在使用history.js ,如果您想构建自己的解决方案,则需要监听稍微不同的事件(例如onpopstate
)并使用稍微不同的结构(history
而不是)。History
还需要注意的是,可以使用您自己的队列数组来构建它,这可以为您提供更多控制,但不能与浏览器的后退按钮结合使用。这是浏览器站点的一个大问题,但是如果您正在构建一个cordova(又名phonegap)Web 应用程序,则要容易得多。
1 刚读过它,它似乎做了一些自己的历史处理,这可能会使集成上述技术变得更加复杂。