【发布时间】:2013-07-02 16:24:48
【问题描述】:
我在 JavaScript 中使用 deviceorientation,我注意到我的 Ipad (iOS 6.1) 和我的 Nexus7 (Android 4.2.2) 之间存在一些差异。
此代码与 Ipad 和 Nexus7 打印的数据不同。
<html>
<head/>
<body>
<button id="calibrate">Calibrate</button>
<button id="stop">Stop</button>
<button id="play">Play</button>
<div id="log"><p></p></div>
<script>
var log = document.getElementById('log');
var calibrate = false;
var calibrateG = 0, calibrateB = 0, calibrateA = 0;
var deviceorientation = function(e) {
if (calibrate) {
calibrateG = e.gamma;
calibrateB = e.beta;
calibrateA = e.alpha;
calibrate = false;
}
var gamma = parseInt(e.gamma - calibrateG);
var beta = parseInt(e.beta - calibrateB);
var alpha = parseInt(e.alpha - calibrateA);
var p = document.createElement('p');
p.innerHTML = gamma + ' ' + beta + ' ' + alpha;
log.insertBefore(p, log.firstChild);
}
document.getElementById('stop').onclick = function() {
window.removeEventListener('deviceorientation', deviceorientation);
};
document.getElementById('play').onclick = function() {
window.addEventListener('deviceorientation', deviceorientation);
};
document.getElementById('calibrate').onclick = function() {
calibrate = true;
};
window.addEventListener('deviceorientation', deviceorientation);
</script>
</body>
</html>
在开始时,Android 打印 0 0 270 和 iOS 0 0 0。
然后,当我以相同的方式移动两者时,它们不会打印相同的值。
谁能解释原因,以及是否有办法规范化数据。
更新 #1
我已经尝试了一些校准,并且我关心横向/纵向。 要复现,你可以拿上面的代码,把ipad和nexus7竖着放在你面前。 校准两者的值(第一个按钮)。 然后取数位板的右上角并旋转它,直到数位板达到 90 度。 平板电脑应该在左侧。
在 Android 上,伽玛值从 0 变为 -80,然后跳至 270。 在 IOS 上,gamma 从 0 变为 -180,没有任何跳跃。
【问题讨论】:
标签: javascript android ios gyroscope device-orientation