【问题标题】:JavaScript algorithm to determine orientation of tablet用于确定平板电脑方向的 JavaScript 算法
【发布时间】: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


【解决方案1】:

http://jsfiddle.net/jjc39/

试试这个:

<span id="orientation">orientation</span>​

$(document).ready(checkOrientation);
$(window).resize(checkOrientation);

function checkOrientation() {
    var orientation = "Portrait";
    var screenWidth = $(window).width();
    var screenHeight = $(window).height();
    if (screenWidth > screenHeight) {
        orientation = "Landscape";
    }
    $("#orientation").html(orientation);
}​

【讨论】:

  • 这比我拥有的要干净得多。但是,它仍然会在键盘盒上跳闸。见:blog.bcholmes.org/wp-content/uploads/2012/12/…
  • 当然可以。在 jsfiddle 中,您位于一个 iFrame 中,该 iFrame 的大小会缩小以适应键盘。我想知道如果您有完整的外部主体标签来评估 $(window) 尺寸,是否还会发生这种情况。
  • 我会尝试一些无帧实验,看看。再次感谢。
  • 我认为这是最接近我找到的答案,尽管我还没有看到任何似乎接近键盘问题的好解决方案。
  • 我建议用 window.innerHeight 和 window.innerWidth 替换 $(window).width() 和 $(window).height()。我发现 jQuery 的 height() 和 width() 经常是不正确的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多