我在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之间,价值就会出错。如果有人有更好的东西,我会很高兴。
答案 0 :(得分:0)
在我的情况下,使用相同的配置(Surface Pro 2 + javascript deviceorientation
),三个角度相反。
为了解决这个问题,我这样做了:
false_alpha = gamma
false_beta = alpha
false_gamma = beta
(我注意到Internet Explorer 11没有反转...)