【问题标题】:How to determine actual viewport width and height on iOS如何确定 iOS 上的实际视口宽度和高度
【发布时间】:2018-01-24 00:58:47
【问题描述】:

当用户缩放页面时,我一直被困在 iOS 上确定页面宽度和高度这样简单的任务。

问题是一些网站的布局很奇怪,看起来像这样:

这是一个未缩放的页面,它的分辨率为 1164x1811 像素,这是正确的。我从window.innerWidthwindow.innerHeight 获得了这些值。高亮区域是一个 body 元素,它的分辨率为 1024x1594 像素,这很重要。

接下来我使用双指缩放来放大页面,它的外观是这样的:

现在,当我尝试获取页面大小时,我分别从 window.innerWidthwindow.innerHeight 获得了 1024x1594 像素。这些值与体型完全相同。

所以问题是如何获得正确的页面大小,无论是否缩放。

我也在 Chrome 中测试了这种特殊情况并得到了正确的结果:无论缩放,它始终是 1164x1811 像素。

【问题讨论】:

  • 请您先在浏览器中检查您的网址。使用响应式 URL 使其正常工作。
  • @rex 问题是,无论页面的移动/桌面表示如何,我都应该能够确定视口大小,因此切换到响应式不是选项

标签: javascript html ios safari viewport


【解决方案1】:

编辑:使用document.body.clientWidthdocument.body.clientHeight 来获得你想要的计算,因为我原来的解决方案现在被认为已经过时了。

您可以使用 document.widthdocument.height 在 iOS Safari 上检索原始页面大小,即使您已经捏拉缩放。

这是对旧的Space Jam site 的测试(当试图想到一个肯定不会响应的网站时想到的)。

【讨论】:

  • 奇怪,这些属性在 iOS 10.3 上是未定义的。这些在规范中也被标记为过时:(
  • @nicholas_r 你说得对 - 我的 iOS 模拟器设置为 9。我在 10 中变得未定义。请稍等!
  • @nicholas_r 更新了我的答案 - 请使用 document.body.clientWidthdocument.body.clientHeight 在缩放时获取文档的原始尺寸。在 iOS 10.3 中测试成功。
  • 感谢您的回复。是的,我已经使用了这些属性,它的工作原理与我的问题完全一样:(。你可以通过从 iOS 设备导航到 habrahabr.ru 并切换到桌面版本来尝试这个。这种方法在大多数情况下都有效,但并非全部我正在寻找任何解决方法
【解决方案2】:

这是一个更棘手但有点没用的方法: 制作一个页面大小的元素,然后计算/获取它的实际大小。

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;
}

【讨论】:

  • 这就是我已经结束的方式,但并非在所有情况下都有效。特别是在问题中提供的情况下。您可以通过从 iOS 设备导航到 habrahabr.ru 并切换到网站的桌面版本来尝试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
相关资源
最近更新 更多