【发布时间】:2012-12-13 19:50:56
【问题描述】:
我们正在构建一个为平板电脑开发的 HTML5/JavaScript 应用程序,我们希望以不同的方式布局我的屏幕,横向和纵向。
最初,我们捕获方向更改通知,并跟踪当前方向(通常报告为 0、90、-90 或 180 度 - 请参阅 this question)。不幸的是,不同的设备报告different orientations as "0"。该链接认为这是一个错误,但有一些证据表明这是按设计工作的 - 例如,this article 建议“横向”是默认方向,并且这些设备在保持时报告“0”方向横向模式。
接下来我们尝试只查看实际的屏幕尺寸,假设当宽度大于高度时,我们处于横向模式。但是当显示屏幕键盘时,这个算法会变得混乱——当显示键盘时,会返回可见区域的尺寸。严格来说,当设备处于纵向模式时,但未被键盘遮挡的屏幕部分比它的高度更宽。
this question 的回复已经很老了。这仍然是最好的答案吗?有没有人有一个很好的算法来考虑键盘的可见性?
【问题讨论】:
-
如何捕获方向变化通知,但从实际屏幕尺寸获取当前方向? (这在用户以纵向模式打开键盘、转到横向并返回纵向的极端情况下会失败。)
-
这是针对移动网络应用程序/网站的吗?如果是这样,请查看媒体查询并测试宽度以改变周围的东西。如果您需要在 javascript 代码中对其进行评估,通常设备的宽度也可以告诉您(跟踪宽度以查看横向与纵向哪个更大。不要检查高度)。
-
你的用例是什么?似乎只需包含
<media name="viewport" value="width=device-width">并在screen and (min-width: 500px) { /* landscape styles */ }上进行媒体查询就可以解决问题(并且可以在桌面上工作)。 -
@agmcleod:感谢媒体查询的建议。我正在尝试一些实验。
-
@AndresRiofrio:我目前有一个设计,在横向模式下,左侧栏中有一个导航列表。当用户从列表中单击一个项目时,主体将变为与该项目相关的应用程序区域。在纵向模式下,列表过渡到应用程序区域。您可能是对的,我可以使用 CSS 媒体查询来完成此操作。我最初的想法是试图找到一个 isPortrait() JavaScript 函数的实现(所有当前的方向逻辑都使用这样的函数)。我现在正在尝试这种方法:davidwalsh.name/orientation-change Thx!
标签: javascript android