2013-10-29 8 views
9

In iOS 7 Safari gibt es jetzt zwei Möglichkeiten, um zurück/vorwärts zu navigieren - mit den herkömmlichen Zurück/Vorwärtspfeil-Pfeilen am unteren Rand 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, da dies eine Animation selbst ist.In iOS 7 Safari, wie unterscheiden Sie Popstate-Ereignisse über Edge Swipe vs die Zurück/FWD-Tasten?

Die Popstate-Ereignisobjekte scheinen jedoch für beide Navigationsarten identisch zu sein - gibt es eine Möglichkeit, zwischen diesen beiden Arten von Benutzernavigationen zu unterscheiden, damit wir entsprechend reagieren können?

UPDATE: Ich konnte (was scheint) einen Fehler in iOS7 Safari verwenden, um die Kantenüberstreichung korrekt 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 safeAnimate 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 99% der Zeit richtig - die einzige Zeit, wo es möglicherweise scheitern könnte ist, wenn ein Benutzer teilweise wischt und dann loslässt und die aktuelle Seite wieder einrasten lässt (an diesem Punkt würde meine Flagge) immer noch deaktiviert) 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 für 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 Ereignis liefern Objekt, das uns sagt, um welche Art von Navigation es sich handelt.

+1

Hallo, könnten Sie Code-Snippet für Ihre Lösung bereitstellen? Danke;) –

+0

Ja, bitte geben Sie ein Code-Snippet an, als ich hierher kam, um nach einer Lösung zu suchen. :) –

+1

Ich kann bestätigen, dass dieser Fehler in iOS 9.3.2 behoben ist. – Rockallite

Antwort

1

Kurze und traurige Antwort: Nein. Diese Rück-/Vorwärts-Swipes werden nicht auf die eigentliche Seite übertragen, sondern auf Betriebssystemebene.

+1

Ich habe festgestellt, dass Touchstart- und Touchmove-Ereignisse während einer Kantennavigation ausgelöst werden (seltsamerweise wird das Touchend-Ereignis nicht ausgelöst, wenn Sie den Finger entfernen, auch wenn Sie die Navigation abbrechen, indem Sie die aktuelle Ansicht wieder einrasten lassen). Ich habe diesen Fehler an Apple gemeldet). Ich könnte eine wirklich hacky Lösung mit diesen Informationen aufbringen, aber es wäre nicht idiotensicher. –

+0

Ja, das wird sehr hacky und dreckig. Höchstwahrscheinlich werden Sie auch auf andere Aktionen mit ähnlichen Ereignissen stoßen. Nach meinem Wissen wurde dies seit den frühen Betas von iOS 7 ein paar Mal als Bug gefüllt. Hoffentlich bietet Apple in Zukunft zumindest einige benutzerdefinierte Event-Eigenschaften an. –