ユーザーがページをズームしたときにiOSでページの幅と高さを決定するなどの簡単なタスクで立ち往生しています。
問題は、一部のWebサイトのレイアウトが奇妙で、次のようになっていることです。
これはスケーリングされていないページであり、解像度は1164x1811ピクセルで、これは正しいことです。これらの値はwindow.innerWidth
とwindow.innerHeight
から取得しています。ハイライトされた領域はボディ要素であり、重要なのは1024x1594ピクセルの解像度です。
次に、ピンチツーズームを使用してページをズームインします。これは次のようになります。
ここで、ページサイズを取得しようとすると、window.innerWidth
とwindow.innerHeight
からそれぞれ1024x1594ピクセルを取得しました。これらの値は、ボディサイズとまったく同じです。
したがって、問題は、ズームの有無にかかわらず、適切なページサイズを取得する方法です。
私はこの特定のケースをChrome=でもテストし、正しい結果を得ました。ズームに関係なく、常に1164x1811ピクセルです。
EDIT:document.body.clientWidth
およびdocument.body.clientHeight
を使用して、私の元の解決策として、必要な計算を取得します廃止されたと見なされます。
使用できます ピンチズームした場合でも、iOS Safariで元のページサイズを取得します。document.width
およびdocument.height
これは古い Space Jamサイト でのテストです(明らかに応答性の低いサイトについて考えようとしたときに頭に浮かびました)。
これは、トリッキーですが少し役に立たない方法です。ページサイズの要素を作成し、実際のサイズを計算/取得します。
let page_size = { height: null, width: null };
{
let div = document.createElement('div');
(styles => Object.keys(styles).forEach(k => div.style[k] = styles[k]))({
height: '100vh', width: '100vw',
position: 'fixed',
top: '-100vh', left: '-100vw'
})
document.body.appendChild(div);
page_size.height = div.offsetHeight;
page_size.width = div.offsetWidth;
}