移动 Safari 不放大方向变化?

Posted

技术标签:

【中文标题】移动 Safari 不放大方向变化?【英文标题】:Mobile Safari not zooming on orientation change? 【发布时间】:2013-06-05 21:17:22 【问题描述】:

我正在开发一个网络应用程序,我希望它能够填充浏览器的整个可视区域,而不需要滚动。我已经用一个视口标签完成了这个:

<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

这似乎对除 Mobile Safari 之外的所有浏览器都有预期的效果。在 Safari 上,我有两个问题:

    纵向模式下页面底部悬垂在窗口底部下方约60px,横向模式下悬垂约120px。我认为这是因为 Safari 的地址栏被视为其可视区域的一部分,但您能否验证这一点以及如何在不影响其他浏览器的情况下绕过它? 页面内容在方向更改后无法正确调整自身大小。页面右侧有一个很大的装订线。

如果有什么不同,我使用的是 jQuery Mobile,这是一个 page 对象,左侧有一个 panel。 Chrome for android 或 Browser.apk 中不存在这些错误。

编辑:可以在http://bit.ly/19LoH8m 找到页面。

谢谢。 斯科特

【问题讨论】:

你能给我们一个链接或jsfiddle吗? jsfiddle.net 已添加到问题中。 先检查这个,api.jquery.com/innerHeight 【参考方案1】:

尝试先更新这些,让我们看看。

代替

$("#mapViewer").outerHeight($(window).innerHeight());

使用

$("#mapViewer").outerHeight($(window).height());

参见 JQ 文档,http://api.jquery.com/innerHeight/

JQM 中也有方向改变事件, 而不是

$(window).resize(function() 
    /* some calculation */
);

使用

$( window ).on( "orientationchange", function( event ) 
    /* some calculation */  
); 

【讨论】:

实际上 Mobile Safari 的检查器为两种高度方法返回相同的值,并且切换它们没有效果。但是,我确实找到了解决方法——我只是删除了视口标签。现在将其作为答案发布,并在我完成跨浏览器测试后将其标记为已接受。【参考方案2】:

通过从视口中删除 widthheight 属性解决了这个问题。它现在可以在 Mobile Safari、Chrome(适用于 ios、桌面和 Android)和 IE10 上正确呈现。

【讨论】:

以上是关于移动 Safari 不放大方向变化?的主要内容,如果未能解决你的问题,请参考以下文章

iPad - 在专注于输入字段时放大方向变化

一个javascript放大镜

当用户放大或缩小时,jQuery 动画在 Chrome/Safari 上的行为异常

原生js放大镜效果

原生JS实现放大镜效果

Vue项目在iOS移动端测试时点击input框页面放大问题