我在iPhone设备(iPhone 7,iOS 10,但也有其他iPhone)上遇到这个问题:在javascript中,如果我拦截orientationchange事件,在处理程序内部,screen.width和screen.height保持不变(和旋转之前一样)。
由于这可能取决于视区设置,因此我的视区在. html文件中是这样声明的:
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1, maximum-scale=1, user-scalable=no" />
在Chrome的模拟可视化中,一切都运行良好。
先谢谢你的帮助。
5条答案
按热度按时间aoyhnmkz1#
据我所知,屏幕的宽度/高度在设备旋转后不会改变。要检查设备是否旋转,您可以读取这些属性
1.窗口方向:该值从0更改为+90/-90
1.窗口内部高度/内部宽度:这些值将交换
1.文档.文档元素.客户端高度/客户端宽度:这些值将交换
不幸的是,这种行为在所有Android/iOS/Window设备上并不一致。我认为this figure中对此有很好的解释。
ubbxdtey2#
iOS过去会恢复屏幕的大小,就像它是纵向的一样。他们在iOS 8上改变了它(在原生类上),但他们可能忘记了在Safari上这样做,或者他们保持这种方式是为了兼容性。
如果需要基于方向的真实的大小,可以使用
window.innerWidth
和window.innerHeight
无论是否使用viewport meta标记,我都得到相同的值
它在Chrome模拟可视化上运行良好,因为它返回了模拟可视化的屏幕大小,这是它应该返回的,但它不模拟基于设备运行的操作系统,因此您不会获得与真实的设备上相同的值(在这种情况下,真实设备没有返回正确的值)
oaxa6hgo3#
CSS无法检测方向更改。
使用JavaScript获取方向更改。
将函数添加为
这将向
window
添加一个event Handler
,以在方向更改时更改body
的width
。有关
orientationchange
的更多参考vh0rcniy4#
jQuery移动的具有处理方向更改事件
onOrienntetionChange
事件,且具有手动更改方向的$(window).orientationchange();
函数。jc3wubiy5#
考虑到这是移动的和iOS设备的行为,这个函数可能会帮助你。验证设备,方向和操作系统。
当移动的方向改变或桌面窗口大小改变时调用此函数。