JS方向改变监听器不点火iOS上,但在Android确实
问题描述:
我有这样的代码:JS方向改变监听器不点火iOS上,但在Android确实
window.addEventListener("orientationchange", orientation);
但它不是在iPhone SE射击orientation()
运行iOS 10.3,但它是射击摩托G运行Android 5.1。
我需要它来更新取决于屏幕宽度的东西。如果它未定义(浏览器差异),我使用window.innerWidth
和screen.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
返回正确的值。也许这可以帮助你。
我明白你在说什么。我以前看到过,但认为这从来没有影响我的代码。谢谢! –