JS方向改变监听器不点火iOS上,但在Android确实

问题描述:

我有这样的代码:JS方向改变监听器不点火iOS上,但在Android确实

window.addEventListener("orientationchange", orientation); 

但它不是在iPhone SE射击orientation()运行iOS 10.3,但它射击摩托G运行Android 5.1。

我需要它来更新取决于屏幕宽度的东西。如果它未定义(浏览器差异),我使用window.innerWidthscreen.width

orientation()如下:

cpr = Math.floor(window.innerWidth/100) - 3; 
if (navigator.userAgent.match(/iPhone|iPad|iPod/i) || navigator.userAgent.match(/Android/i)) cpr = Math.min(Math.floor(screen.width/100) - 1, 8); 
if (!cpr || cpr <= 0) cpr = 1; 
id('times').innerHTML = ""; 
updateTimes(); 

的代码工作正常,它只是不工作在iOS。我在Chrome开发工具设备查看器中试过它,它允许您使用不同的特定手机或设备来测试屏幕大小和浏览器/设备样式/代码/用户代理。它在那里运行得很好。

我试着查看所有其他堆栈溢出问题,但他们没有回答我的问题。

您可以浏览网站http://rucubing.bitballoon.com以了解它是如何工作的。

谢谢!

我有一个resize事件的类似问题。 我在this page找到原因。

直到最近,Mobile Safari在调整视口大小和页面布局后都正确地发布了调整大小事件。但是,情况已不复存在。而是在页面完全布局之前发布。任何依赖于clientWidth,clientHeight,getBoundingClientRect等onresize回调的JavaScript现在都被破坏了。

也许orientationchange事件也在页面完全布局之前触发,所以window.innerWidth返回一个错误的值。

编辑:

最近我发现document.documentElement.clientWidth返回正确的值。也许这可以帮助你。

+0

我明白你在说什么。我以前看到过,但认为这从来没有影响我的代码。谢谢! –