在iOS7Safari中,现在有两种导航后退/前进的方法——使用底部传统的后退/前进按钮箭头或从屏幕边缘滑动。我在我的ajax应用程序中使用动画在页面之间进行转换,但如果用户通过边缘滑动进行导航,我不想触发该转换,因为这本身就是一个动画。但是,两种类型的导航的popstate事件对象似乎是相同的——有什么方法可以区分这两种类型的用户导航,以便我们做出相应的响应吗?更新:我能够使用(似乎是)iOS7Safari中的错误来正确检测边缘滑动与后退按钮点击。该错误是在使用边缘滑动时不会触发touchend事件(直到下一个触摸事件)(但touchstart和touchmove是)。所以我设置了一
鉴于以下情况:$(window).bind("popstate",function(){alert('popstate');});首次加载时,FireFox和Chrome会触发警报,但Safari不会。这是为什么?还有其他人看到这个并且知道如何最好地解决这个问题吗? 最佳答案 请参阅pjax中的代码。pjax是现在相当流行的开源库,因此以下逻辑可能是避免此问题的最佳方法。varpopped=('state'inwindow.history),initialURL=location.href$(window).bind('popsta
在js方面,我几乎是一个新手,所以如果我遗漏了一些非常简单的东西,我很抱歉。基本上,我对history.pustate和popstate的使用做了一些研究,我已经做到了,所以在url的末尾添加了一个查询字符串(?v=images)或(?v=profile)...(v意思是“View”)通过使用这个:varurl="?v=profile"varstateObj={path:url};history.pushState(stateObj,"page2",url);我想这样做,这样我就可以将内容加载到一个div中,但无需重新加载我使用.load()完成的页面。功能。然后我使用了这段代码:$(
我正在开发一个网页,根据下一步或后退Action我做相应的动画,使用pushstate时会出现问题。当我收到事件时,我如何知道用户是否使用PushstateAPI单击了后退或转发历史按钮?还是我必须自己实现一些东西? 最佳答案 您必须自己实现它,这很容易。调用pushState时,为数据对象提供一个唯一的递增ID(uid)。当onpopstate处理程序被调用时;根据包含最后一个状态uid的持久变量检查状态uid。用当前状态uid更新持久变量。根据状态uid大于还是小于上一个状态uid执行不同的操作。
是否可以防止发生popstate事件时滚动文档的默认行为?我们的网站使用jQuery动画滚动和History.js,无论是通过pushstate还是popstate,状态更改都应将用户滚动到页面的不同区域。问题是浏览器会在popstate事件发生时自动恢复到之前状态的滚动位置。我尝试使用一个容器元素设置为文档的100%宽度和高度,并滚动该容器内的内容。我发现的问题是它似乎不像滚动文档那样流畅;特别是如果使用大量css3,例如框阴影和渐变。我还尝试在用户启动滚动期间存储文档的滚动位置,并在浏览器滚动页面(在popstate上)后恢复它。这在Firefox12中运行良好,但在Chrome1