JS - iOS 上的 Safari - 如何获取视口比例属性

Shl*_*rtz 4 javascript mobile window viewport ios

在 Chrome 上,我可以通过查看window.visualViewport.scale它在 Safari 上可用来获得视口比例,但是,似乎window.visualViewport没有在 iOS上的旧版本Safari 上定义。

有什么解决方法吗?

Vo *_*yen 8

首先,您需要使用clientWidthinnerWidth获取视口宽度

var viewportWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
Run Code Online (Sandbox Code Playgroud)

然后,您需要获得实际的屏幕宽度

var screenWidth = window.screen.width
Run Code Online (Sandbox Code Playgroud)

然后,视口比例就在你手上

var viewportScale = screenWidth / viewportWidth
Run Code Online (Sandbox Code Playgroud)


小智 5

根据caniuse.com 的 visualViewport.scale说法,iOS 版 Safari 从 2019 年 9 月 19 日发布的 13.0 版开始就可以使用该功能。您更新了吗?

如果您确实需要支持旧版 iOS 版 Safari,并且不需要在页面加载时测量比例,您可以尝试捕获触摸事件并自行猜测/计算比例。

如果你真的很绝望,你可以尝试“发明一些自行车”。例如(只是概念):<div>在 内部创建并测量 2 <body>。其中一个width: 100vw;和另一个width: 100%;(这实际上是不需要的,因为块已经是父块的 100% 宽度)。这里的技巧在于不同的单位。100vw应始终为视口的 100%,而100%应拉伸以获得最大可用宽度。测量这两个块之间的差异,您可以计算比例。注意那些棘手的边距/填充,也许还有景观。