在iOS 7 Safari中,如何通过边缘滑动来区分popstate事件与后退/前进button?
在iOS 7 Safari中,现在有两种方法可以向后/向前导航 – 使用底部的传统后退/前进button箭头或从屏幕边缘滑动。 我正在使用animation在我的ajax应用程序中的页面之间转换,但是我不想在用户通过边缘滑动进行导航时触发该转换,因为这是animation本身。
但是,popstate事件对象对于这两种types的导航看起来都是相同的 – 是否有任何方法可以区分这两种types的用户导航,以便我们可以相应地进行响应?
更新:我能够使用(似乎是)iOS7 Safari中的错误,以正确检测边缘滑动与后退button水龙头。 缺点是触发事件不会触发(直到下一个触摸事件),当使用边缘滑动(但touchstart和touchmove是)。 所以我设置了一个shouldAnimate标志,并在touchmove上禁用它 – 然后如果该标志被禁用,popstate发生,我知道这是一个边缘滑动。
99%的时间是正确的 – 唯一可能失败的时候是用户边缘部分滑动,然后放开,让当前页面恢复到原位(此时我的标志仍然被禁用)然后点击后退button(不触发事件)。 为了处理最后一个[edge]情况,我在touchmove上设置了一个定时器,在50ms后重新启用标志。
是的,它是“脏”,但现在它几乎在所有情况下得到我想要的东西,所以我可以这样做 – 直到苹果修复了这个bug,但希望他们也会在popstate事件对象中提供一个指示器,告诉我们它是什么样的导航。
简短和难过的答案:不。这个后退/向前滑动不会传播到实际页面,而是发生在操作系统级别。