我使用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之间,这些值也是错误的。如果任何人有更好的东西,我会很高兴。
不知道,如果以同样的方式,但值从变化iOS to android以及 – dandavis 2015-01-21 00:00:39
我附近没有安卓设备,所以我不能说,但我可以在下周测试并报告回来 – BlackWolf 2015-01-21 15:53:57