在iOS 7 Safari中,如何通过边缘滑动与后退/前进按钮来区分popstate事件?

时间:2013-10-29 15:25:21

标签: javascript ios safari mobile-safari popstate

在iOS 7 Safari中,现在有两种向前/向后导航的方式 - 使用底部的传统后退/前进按钮箭头或从屏幕边缘滑动。我正在使用动画在我的ajax应用程序中的页面之间进行转换,但如果用户通过边缘滑动导航,我不想触发该转换,因为这是一个动画本身。

但是,对于这两种类型的导航,popstate事件对象看起来都是相同的 - 有没有办法区分这两种类型的用户导航,以便我们可以做出相应的响应?

更新:我能够使用(似乎是)iOS7 Safari中的错误来正确检测边缘滑动与后退按钮点击。问题在于,当使用边缘滑动(但是touchstart和touchmove)时,触摸事件不会被触发(直到下一个触摸事件)。所以我设置了一个 shouldAnimate 标志并在touchmove上禁用它 - 然后如果标志被禁用并且popstate发生,我知道它是一个边缘滑动。

99%的时间都是正确的 - 唯一可能失败的时间是用户边缘部分滑动然后放开然后让当前页面重新弹回到位(此时我的标志仍然会被禁用)然后点击后退按钮(不触发任何触摸事件)。为了处理最后的[边缘]情况,我在touchmove上设置了一个定时器,以便在50ms后重新启用该标志。

是的,它“脏”但是现在几乎在每种情况下它都能得到我想要的东西所以我很好 - 直到Apple修复了这个bug,但希望它们还能在popstate事件对象中提供一个指示器它告诉我们它是什么样的导航。

1 个答案:

答案 0 :(得分:1)

简短而悲伤的答案:不会。这种后退/前进滑动不会传播到实际页面,而是发生在操作系统级别。