我通常使用orientationchange
事件添加/删除CSS类的内容,并从那里开始,而不是重新调整视口的大小。 Apple提供了一些独立的示例代码,尽管从内存来看,我认为它只包含90°和0°方向 - 您也需要-90°和180°,如@zyrex评论。根据注释
iPhoneOrientation sample code (developer.apple.com)
更新: 为了澄清,我没有重新大小HTML实体本身,而是改变所使用的类,并依靠CSS相应的风格。举一个简单的例子,说我想要两个类之间的body
元素,这取决于设备的方向切换,我会做我的JavaScript是这样的:
window.onorientationchange = updateOrientation;
// (Might want to do this onload too)
function updateOrientation(){
var o = window.orientation, body = document.querySelector('body');
switch(o){
case 0: case 180:
body.className = 'portrait';
break;
case 90: case -90:
body.className = 'landscape';
break;
}
}
...而这样的事情在默认标志-up:
<body class="portrait">
<!-- stuff here -->
...然后CSS做任何需要的东西 - 例如对于不同的位置body元素的background
:
body {background: url('images/something.png') no-repeat}
body.portrait {background-position: 30% 50%}
body.landscape {background-position: 10% 25%}
更新#2 您可能还需要在您的meta标签的maximum-scale
指令进行修补。移动Safari通常会在从纵向更改为横向时进行缩放,而不是重新进行页面布局,这可能就是您所看到的。
maximum-scale
值可以防止这种情况发生,但您应该注意,这也意味着用户无法执行正常的捏放缩放操作。这里的标签是什么样子:
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
您一定要核对答案过于:
How do I reset the scale/zoom of a web app on an orientation change on the iPhone?
来源
2011-09-30 06:49:57
Ben
谢谢,这就是我一直在寻找的东西。 –
我只是想多谢你回答,这是金。事情是我搜查了一切,但我找不到像这样的东西。到处都是增加一个班级的例子,如果没有认真的重写,那么这个班级不会帮助我。所以谢谢一堆! –
这种方法的问题是你防止用户缩放,这对于辅助功能来说不是好的... – scruffian