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 では、ガンマは変化なしで 0 から -180 まで変化します。