我正在使用 JavaScript 中的设备方向,我注意到我的 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 上,gamma 从 0 变为 -80,然后跳转到 270。在 IOS 上,gamma 从 0 变为 -180,没有任何跳转。