2015-01-20 74 views
0

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

经过探索,有点似乎阿尔法和伽马值切换在Surface Pro上,如在this page上测试时可以看到的那样。

当平躺在桌子上并旋转设备时,我的iPad Air会在Surface Pro更改伽玛值时更改其Alpha值。当拿起设备时(与桌子成90度角),iPad上的伽马值为90,Surface Pro上的伽玛值为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以及伽马之间应该是-180和之间180.如果其中一个超出范围,这意味着它们可能被翻转。显然,这只是一种解决方法,只要保持在0到180之间,这些值也是错误的。如果任何人有更好的东西,我会很高兴。

+0

不知道,如果以同样的方式,但值从变化iOS to android以及 – dandavis 2015-01-21 00:00:39

+0

我附近没有安卓设备,所以我不能说,但我可以在下周测试并报告回来 – BlackWolf 2015-01-21 15:53:57

回答

0

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

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

false_alpha = gamma 
false_beta = alpha 
false_gamma = beta 

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