私が取り組んでいるプロジェクトでは、奇妙な問題に遭遇しました。私はここで(または他の場所で)答えを見つけることができませんでした。orientationchangeイベントがスクロールしてイベントのサイズを変更します
何が起こるかを示すためにフィドルを作成しようとしましたが、スクリプトの性質とjsfiddleの機能のために正しく機能しません。とにかく、here's a link to the Fiddleなので、少なくともあなたはコードを持っています。 resize
、orientationchange
とscroll
:私は
は三つの可能なwindow
イベントに単一のハンドラ(onViewportChange
)を実行起こるしたい何
。イベントタイプに基づいて、ハンドラは何をすべきかを把握します。かなり簡単です。私はこの例では
をやった
、私はテスト目的のために、イベントの種類をエコーするハンドラが限られている:
var onViewportChange = function(e) {
alert(e.type);
};
私はイベントにハンドラをバインドします(私は持っていますまた、イベントの配列、およびいくつかの別個の結合)で.bind()
を試み
$(window).on({
'orientationchange resize scroll' : function(e){
onViewportChange(e);
}
});
HTMLでのcompletありますイベントは、主に(デスクトップブラウザ上に微細な火災:実際に
をたまたまそして今、それは奇妙な取得何
任意の基本要素(DOCTYPE、htmlの、身体とofcourseのjQueryと、このスクリプト)を除いて、エリー空(iOS6 + iPad 3世代およびiOS6 + iPhone 5でテストされた)モバイルデバイス上では実行されません。私は自分のデバイスを回転させます。
- iPadとiPhone火災全て3:私は借りAndroid携帯電話が
resize
orientationchange
をトリガーorientationchange
、resize
iPhone上scroll
orientationchange
resize
が続い発射(競合状態のため、イベントの順序が正確でない場合があります)
そして、ここで私がorientationchange
イベントにそれをリンク理由です:私は(resize
とscroll
を残す)orientationchange
イベントを削除すると、唯一のscroll
イベントは、デバイスの回転に解雇、しかし、もはやresize
イベントです。
なぜすべてのイベントが一度に発生するのかわかりません。少なくとも;私はでresize
がトリガーされたと想像することができます。なぜなら、ウィンドウのサイズが変わるからですが、scroll
?
これはなぜ起こっているのですか?
編集は、私がここにデモを設定しました:http://beta.hnldesign.nl/orientation/index.html
'window.scrollTop'と' window.scrollLeft'の値が内部的に再構築/再評価されたとき、Mobile Safariは 'resize'イベントを引き起こします。回避策として 'scroll'イベントのトリガを避けるためにフラグを使うことができます。 – inhan
私は、Safariがオリエンテーションが変更される前にページ上にあったポイントにスクロールしようとしているので、 'scroll'イベントが発生していると思います... – MassivePenguin
どうもありがとうございます。しかし、スクロール 'と実際のユーザー'スクロール '? –