In iOS 7 Safari gibt es jetzt zwei Möglichkeiten, um rückwärts / vorwärts zu navigieren - mit den herkömmlichen Zurück / Vorwärtspfeil-Pfeilen unten oder durch Wischen vom Bildschirmrand aus. Ich benutze eine Animation, um zwischen den Seiten in meiner Ajax-App zu wechseln, aber ich möchte diesen Übergang nicht auslösen, wenn Benutzer mit dem Edge-Swipe navigieren, denn das ist eine Animation selbst.
Die Popstate-Ereignisobjekte scheinen jedoch für beide Arten der Navigation identisch zu sein. Gibt es eine Möglichkeit, zwischen diesen beiden Arten von Benutzernavigationen zu unterscheiden, damit wir entsprechend reagieren können?
UPDATE: Ich war in der Lage, einen Fehler in iOS7 Safari zu verwenden, um den Rand Swipe vs. Back Button Tap richtig zu erkennen. Der Fehler ist, dass das touchend -Ereignis nicht ausgelöst wird (bis zum nächsten Berührungsereignis), wenn die Kantenüberstreichung verwendet wird (aber touchstart und touchmove sind). Also setze ich ein shouldAnimate -Flag und deaktiviere es auf touchmove - dann, wenn das Flag deaktiviert ist und der Popstate auftritt, weiß ich, dass es ein Edge-Swipe ist.
Es ist in 99% der Fälle korrekt - die einzige Zeit, in der es möglicherweise scheitern könnte, ist, wenn ein Benutzer die Seite teilweise wischt und dann loslässt und die aktuelle Seite wieder einrasten lässt (an diesem Punkt würde meine Flagge immer noch funktionieren) deaktiviert sein) und tippen Sie dann auf den Zurück-Button (der keine Touch-Ereignisse auslöst). Um diesen letzten [edge] Fall zu behandeln, setze ich einen Timer auf touchmove, um das Flag nach 50ms wieder zu aktivieren.
Ja, es ist "dreckig", aber jetzt bekommt es mich, was ich in fast jedem Fall will, also bin ich damit einverstanden - bis Apple den Fehler behebt, aber hoffentlich werden sie auch einen Indikator im popstate Ereignisobjekt bereitstellen das sagt uns, welche Art von Navigation es ist.
Tags und Links javascript ios mobile-safari safari popstate