私は、JQueryに基づいてジェネリックなjavascriptダイアログクラスを作り、画面中央にdivポップアップを作成しようとしています。すべての一般的なブラウザでこれを達成するのは簡単なバニラでした。メタビューポートとAndroidに関する問題
モバイルプラットフォームの場合、ビューポートの問題が発生します。表示されているビューポート(表示されている現在の「表示ウィンドウ」です)、レイアウトビューポート(下にあるページのサイズ、つまりCSSビューポート)の違いです。 iPhone用
、私はスケーリングのためのセンタリング調整するDOMプロパティwindow.innerWidthとwindow.innerHeightを使用することができた、とpageXOffset/pageYOffsetで、パンを調整するために:
// Get dialog width/height
var dx = $("#dialog").width();
var dy = $("#dialog").height();
// Get window (layout viewport) width/height
var winW = $(window).width();
var winH = $(window).height();
if (window.innerWidth!=winW) {
// Zoomed in or users browser window width is smaller than layout width
var x = window.pageXOffset+(window.innerWidth-dx)/2;
} else {
// Not zoomed in
var x = window.pageXOffset+(winW-dx)/2;
}
if (window.innerHeight!=winH) {
// Zoomed in or users browser window height is smaller than layout height
var y = window.pageYOffset+(window.innerHeight-dy)/2;
} else {
// Not zoomed in
var y = window.pageYOffset+(winH-dy)/2;
}
私はその後、私のダイアログの左/上をそれぞれxとyに設定して配置します。これはほとんどのブラウザやiPhoneでもうまくいきますが、Androidプラットフォームでは動作しません。
Googleを使用して過度の調査を行った後、Androidはwindow.innerWidthプロパティとwindow.innerHeightプロパティで多少の問題を抱えていると思われます(例:http://www.quirksmode.org/mobile/viewports2.html、「表示可能なビューポートの測定」を検索)。
オプションは、Androidブラウザを識別し、window.pageXOffset/window.pageYOffsetで常にダイアログを配置することで、表示されるビューポートの上/左に配置されます。しかし、これは多くの理由で悪い選択です。特に、ズームアウトすると悪く見えることがあります。
Androidで表示可能なビューポートを計算する方法を知っている人はいますか?それとも誰かにこれの回避策が見つかりましたか?
ダイアログがマウスイベントなどのユーザーイベントに対する応答です...この質問に答えましたか? – Prusse
はい、それは一般的な考えです。 –
何らかのオブジェクト検出と共にevent.pageX/Yとevent.clientX/Yを処理してみることもできます。 – Prusse