2013-10-29 5 views
9

iOS 7 Safariでは、従来の戻る/進むボタンを使用して画面の下端からスワイプするか、画面の端からスワイプすることで、前後にナビゲートする2つの方法があります。私は、私のajaxアプリケーションでページ間を移動するアニメーションを使用していますが、それはアニメーションそのものなので、ユーザーがエッジスワイプでナビゲートしている場合は、その遷移を起動したくありません。iOS 7 Safariでは、エッジスワイプとバック/フォワードボタンを使ってポップステートイベントをどのように区別しますか?

しかし、popstateイベントオブジェクトは、両方のタイプのナビゲーションで同じように見えます。これら2つのタイプのユーザーナビゲーションを区別するための方法はありますか?

UPDATE: iOS7 Safariでエッジスワイプとバックボタンのタップを正しく検出するバグを使用できました。バグは、エッジスワイプ(ただし、touchstartとtouchmoveが使用されている)を使用しているときに、touchendイベントが(次のタッチイベントまで)トリガされないということです。だからshouldAnimateフラグを設定してtouchmoveで無効にしてください。フラグが無効でポップステートが発生すると、それはエッジスワイプです。

時間の99%です - 失敗する可能性がある唯一の時間は、ユーザーが部分的にスワイプした後に移動して現在のページを元の場所に戻すときです(その時点で私のフラグはまだ無効になっています)、その後、戻るボタンをタップします(タッチイベントは発生しません)。その最後の[edge]のケースを処理するために、私は50ms後にフラグを再び有効にするためにtouchmoveにタイマーを設定しました。

はい、それは「汚い」ですが、ほとんどの場合、私が欲しいものを得ることができます。アップルがバグを修正するまでは大丈夫ですが、ポップステートイベントそれがどのような種類のナビゲーションであるかを示すオブジェクトです。

+1

こんにちは、ソリューションのコードスニペットを提供できますか?ありがとう;) –

+0

はい、解決策を探してここに来たので、コードスニペットを提供してください。 :) –

+1

このバグはiOS 9.3.2で修正されていることが確認できます。 – Rockallite

答えて

1

答え:いいえ。このバック/フォワードスワイプは実際のページには伝播されませんが、OSレベルで発生します。

+1

私は、エッジスワイプの間にtouchstartとtouchmoveイベントが発生することを発見しました。(現在のビューを元の位置に戻してナビゲーションをキャンセルしたとしても、あなたが指を離すと、私はAppleにこのバグを報告した)。私はこの情報を使って本当にハックな解決策を盛り込むことができますが、それは絶対確実ではありません。 –

+0

はい、それは非常にハッキーと汚れになるでしょう。ほとんどの場合、同様のイベントを持つ他のアクションも実行されます。 これは、iOS 7の初期のベータ版以降、バグとして数回満たされています.Appleが今後いくつかのカスタムイベントプロパティを提供してくれることを祈っています。 –