【发布时间】:2019-07-30 23:05:56
【问题描述】:
我正在使用 window.onresize 来监听视口大小的变化,以便我可以适当地缩放我的内容(这是一个游戏 UI,因此使用 window.onresize + css scale 似乎最简单,欢迎其他建议)。
但是,在某些浏览器上,在 onresize 触发后立即调用 window.innerHeight 或 window.innerWidth 会产生错误的结果。
这是一个最小的工作示例:
<html>
<head>
<title>Firefox Resize bug</title>
<link
rel="manifest"
href='data:application/manifest+json,{ "name": "onresize bug", "display":"standalone"}'
/>
</head>
<body>
Height: <span id="heightField"></span>
<br />
Width: <span id="widthField"></span>
<script>
const heightField = document.getElementById("heightField");
const widthField = document.getElementById("widthField");
const updateSize = () => {
heightField.textContent = window.innerHeight;
widthField.textContent = window.innerWidth;
};
window.onresize = updateSize;
updateSize();
</script>
</body>
</html>
这在 iOS 12 Safari 中运行良好,当您更改方向时,高度和宽度会正确更新。
但是,它在 iOS Firefox/Chrome 上不起作用(至少,不可靠),如果您将此应用程序添加到 iPhone 的主屏幕,它也不起作用(参见上面示例中的清单)
我通过在 onresize 事件后触发 updateSize 500 毫秒来解决这个问题,但这里到底发生了什么?
【问题讨论】:
-
截至 2021 年 3 月 18 日,iPad IOS 14.4.1 仍然存在问题
标签: javascript iphone firefox