Я играю с ориентацией устройства в 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 гамма изменяется от 0 до -80, а затем скачет до 270. На IOS гамма изменяется от 0 до -180 без каких-либо скачков.