JS - iOS 上的 Safari - 如何获取视口比例 属性
JS - Safari on iOS - How to get viewport scale property
在 Chrome 上,我可以通过查看 window.visualViewport.scale
获得视口比例,它在 Safari 上可用,但是,window.visualViewport
似乎未在旧版本的 Safari iOS.
有什么解决方法吗?
根据 caniuse.com visualViewport.scale
应该可以在 2019 年 9 月 19 日发布的版本 13.0 的 iOS Safari 中使用。你更新了吗?
如果您确实需要为 iOS 支持旧版 Safari,并且如果您不需要在页面加载时立即测量比例,您可以尝试捕捉 touch events 和 guess/calculate 自己缩放。
如果真的要走投无路,可以试试"invent some bicycle"。例如(只是概念):在 <body>
内创建并测量 2 <div>
。其中一个 width: 100vw;
和另一个 width: 100%;
(这实际上是不需要的,因为块已经是父块宽度的 100%)。这里的诀窍在于不同的单位。 100vw 应始终为视口的 100%,而 100% 应拉伸至最大可用宽度。测量这 2 个块之间的差异,您可以计算比例。注意那些棘手的问题 margins/paddings,也许还要注意风景。
首先,您需要使用 clientWidth 或 innerWidth
获取视口宽度
var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
然后,你需要得到实际的屏幕宽度
var screenWidth = window.screen.width
那么,视口比例就在你手上了
var viewportScale = screenWidth / viewportWidth
在 Chrome 上,我可以通过查看 window.visualViewport.scale
获得视口比例,它在 Safari 上可用,但是,window.visualViewport
似乎未在旧版本的 Safari iOS.
有什么解决方法吗?
根据 caniuse.com visualViewport.scale
应该可以在 2019 年 9 月 19 日发布的版本 13.0 的 iOS Safari 中使用。你更新了吗?
如果您确实需要为 iOS 支持旧版 Safari,并且如果您不需要在页面加载时立即测量比例,您可以尝试捕捉 touch events 和 guess/calculate 自己缩放。
如果真的要走投无路,可以试试"invent some bicycle"。例如(只是概念):在 <body>
内创建并测量 2 <div>
。其中一个 width: 100vw;
和另一个 width: 100%;
(这实际上是不需要的,因为块已经是父块宽度的 100%)。这里的诀窍在于不同的单位。 100vw 应始终为视口的 100%,而 100% 应拉伸至最大可用宽度。测量这 2 个块之间的差异,您可以计算比例。注意那些棘手的问题 margins/paddings,也许还要注意风景。
首先,您需要使用 clientWidth 或 innerWidth
获取视口宽度var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
然后,你需要得到实际的屏幕宽度
var screenWidth = window.screen.width
那么,视口比例就在你手上了
var viewportScale = screenWidth / viewportWidth