2

以下代码片段中的 alpha 值应根据设备的旋转在 0 到 360 之间变化:

window.addEventListener('deviceorientation', function(eventData) {
    var LR = eventData.gamma;
    var FB = eventData.beta;
    var DIR = eventData.alpha;

    deviceOrientationHandler(LR, FB, DIR);
});

这种变化应该取决于它所面对的风向。为此,该设备使用磁力计/指南针。

当我在 ipad 3 上测试时,我遇到了以下问题:

它从 0 到 360 变化,但以相对的方式变化。页面加载时显示 0,然后在 0 和 360 之间变化。但是当设备旋转并刷新页面时,它再次开始显示 0,然后在这些值之间变化。

因为它应该遵循风向,我试图找出北方在哪里,我需要它以绝对方式而不是相对方式来做到这一点。又名:无论页面加载时设备面向的时间和方向,在面向某处时始终显示相同的值。

这些资源表明 API 应该能够做到这一点:

html5rocks

和这个:

W3C

这是一个示例,当面向北方时“方向”应为 0(或至少返回一致的值):

html5rocks 页面包含一个示例(ctrl + f 和“试用”)。不能发布超过 2 个 URL

这是指示设备面对的风向的正确方法吗?我需要将它与 Google Maps Api 结合使用。

最后,我知道 Ipad 3 有指南针应用程序,因此该设备应该能够做到这一点。

我很困惑 :)

4

3 回答 3

4

根据 W3C:

无法为三个角度提供绝对值的实现可以改为提供相对于某个任意方向的值,因为这可能仍然有用。在这种情况下,absolute 属性必须设置为 false。否则,绝对属性必须设置为 true。

于 2014-03-08T07:34:38.400 回答
2

这是一个老问题,但由于过去几年的一些变化(浏览器更新),我遇到了同样的问题。有两种方法可以解决这个问题:

设备方向绝对

https://developers.google.com/web/updates/2016/03/device-orientation-changes

(适用于 android 上的opera、chrome、maxthon)

带校准的设备方向

检查 compass-north 是使用设备运动还是 HTML5 watchLocation 运动

于 2016-12-12T23:05:49.680 回答
1

在 Mobile Safari (iOS) 中,alpha 是基于第一次请求设备方向时设备指向的方向。因此,当您在 iPad 显示东方时激活 deviceorientation 侦听器时,东方的 alpha 为 0。要获得正确的指南针方向,您需要在 iOS 上使用 webkit 参数 webkitCompassHeading。所有其他浏览器都接受 alpha 作为指南针方向。为了支持他们所有人:

var compassdir;
if(eventData.webkitCompassHeading) {
  compassdir = eventData.webkitCompassHeading;
}
else compassdir = eventData.alpha;
于 2014-12-06T12:15:57.127 回答