Microsoft Surface Pro 2上的JavaScript设备方向:已切换alpha和gamma值

时间:2015-01-20 23:37:10

标签: javascript ios gyroscope device-orientation

我在JavaScript中使用deviceorientation事件来检索陀螺仪数据。到目前为止,我已经在完美运行的iOS设备上进行了测试。今天我在运行Chrome 39的Microsoft Surface Pro 2平板电脑上尝试了相同的代码,并注意到我得到了非常奇怪的值。

稍微探讨一下后,似乎在Surface Pro上切换了alpha和gamma值,因为在this page上进行测试时可以看到它。

当平躺在桌子上并旋转设备时,我的iPad Air会在Surface Pro更改伽马值时更改其alpha值。拿起设备时(因此它与桌子成90度角),iPad上的伽玛值为90,Surface Pro上的alpha值为90.

我想,根据HTML5Rocks给出的关于这些事件应该如何工作的描述,iPad正在做正确的事情,但Surface Pro不是。

所以我想我的问题是:这是一个已知的问题吗?有没有办法检测或解决这个问题?

解决方法

我目前正在使用以下解决方法:

var alphaGammaFlipped = false;
window.addEventListener("deviceorientation", function(e) {
    if (e.alpha < 0 || e.gamma > 180) alphaGammaFlipped = true;

    var alpha = e.alpha;
    var beta  = e.beta;
    var gamma = e.gamma;
    if (alphaGammaFlipped) {
        var temp = alpha;
        alpha = gamma;
        gamma = temp;
    }

    // Do something with alpha, beta, gamma...
});

此代码使用alpha应该在0到360之间且gamma应该在-180和180之间的假设。如果其中一个超出界限,这意味着它们可能被翻转。显然,这只是一个解决方法,只要两者都保持在0到180之间,价值就会出错。如果有人有更好的东西,我会很高兴。

1 个答案:

答案 0 :(得分:0)

在我的情况下,使用相同的配置(Surface Pro 2 + javascript deviceorientation),三个角度相反

为了解决这个问题,我这样做了:

false_alpha  =  gamma
false_beta   =  alpha
false_gamma  =  beta

(我注意到Internet Explorer 11没有反转...)