javascript - 在方向改变时重新渲染网页的最佳方法是什么?

标签 javascript iphone mobile orientation

我有一个流畅的 CSS 布局,当我更改方向时,它在 iPhone 上渲染得很糟糕。 (刷新后看起来不错)。

我使用下面的代码来刷新方向更改时的页面,效果很好 - 只是感觉这样做有点不对。有没有什么方法可以实现这一点而无需重新加载整个页面?这是一个移动网站,我真的不想强制用户加载页面两次。

var supportsOrientationChange = "onorientationchange" in window,
    orientationEvent = supportsOrientationChange ? "orientationchange" : "resize";

window.addEventListener(orientationEvent, function() {
    window.location.reload()
}, false);   

编辑:

在 iPhone 上测试时的两个主要问题是:

我有一个宽度为 100%、背景图像右对齐的图像。 当我将方向从纵向更改为横向时,主体宽度保持在纵向模式下呈现的方式,反之亦然。从横向到纵向,这更是一个问题,因为页面太宽,并且似乎渲染了两次图像。

最佳答案

假设您的 CSS 已经在各种尺寸的移动设备屏幕上顺利呈现,您需要在模板的 中定义视口(viewport)。

例如,这将页面宽度设置为设备的屏幕宽度,并将初始缩放设置为 100%。初始缩放在页面加载时应用,但在方向更改时不应用。

<meta name="viewport" content="width=device-width, initial-scale=1.0">

通过向视口(viewport)添加 Maximum-scale=1.0 参数,您将强制 iPad/iPhone 保持缩放级别并在方向更改时重新布局页面。这样做的缺点是它将禁用缩放。但是,优点是您可以使用媒体查询进行布局调整,以适合当前方向的方式呈现内容。您可以在此处阅读有关视口(viewport)的更多信息:Choosing a ViewPort

现在进入媒体查询。您应该将媒体查询放在 CSS 文件的底部,并按照屏幕宽度从最小宽度到最大宽度的顺序。例如,取自Html5BoilerPlate CSS 示例:

@media only screen and (min-width: 480px) {
  /* Style adjustments for viewports 480px and over go here */

}

@media only screen and (min-width: 768px) {
  /* Style adjustments for viewports 768px and over go here */

}

因此,所有普通样式都在此之上并首先应用,然后,如果屏幕为 480 像素或更宽,则应用下一个样式 block ,然后,如果屏幕为 768 像素或更宽,则应用最后一个样式 block 。

通过将固定缩放级别设置为 1.0 和媒体查询相结合,您可以使您的网站根据屏幕尺寸和方向进行响应式调整,而无需使用 JavaScript。显然,您需要确保网站设计良好,以便用户不需要缩放。如果您的网站针对移动设备进行了优化,这应该不是问题。

请注意:其他非 safari 移动浏览器可能会重新布局页面,而不在视口(viewport)上设置最大比例。但这种行为是不一致的,大多数开发人员似乎都迎合苹果设备,即使实现比其他设备差。当方向改变时,其他一些设备将保持缩放级别并重新调整视口(viewport)的位置。但所有设备都可以将缩放级别固定为 1.0。

关于javascript - 在方向改变时重新渲染网页的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7919172/

相关文章:

javascript - Html Iframe Excel ,在 excel 中获取超链接以打开新选项卡或窗口

iphone - 在iOS中旋转视频

iphone - 如何创建具有用户间即时消息功能的 iPhone 应用程序

iphone - 为什么带有 iOS 6.1.3 的 iPhone 4 无法连接 xcode 4.5 进行测试?

html - div 不会在移动浏览器中占用整个宽度

javascript - 如何从单个表单元素内的多个字段集中获取输入字段(包括选择、文本区域)的所有值?

javascript - 如何在Jquery中调用属性值的onChange函数

java - Android webview 出现错误

css - 手机菜单不显示在手机上,只显示在桌面上

javascript - 在 forEach 中连续进行 AJAX 调用 - 为什么我看不到结果?