2

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 まで変化します。

4

2 に答える 2

5

Full Tilt JSは、Android と iOS の deviceorientation 実装の間でデータ値を正規化します。また、ユーザーが画面を回転させるたびに、デバイスの方向データの一貫性が保たれます。

この記事では、Full Tilt JS ライブラリで使用されているいくつかの手法の概要を説明します。

免責事項: 私は上記の記事とライブラリの両方の著者です。試してみて、Github プロジェクトで直接問題を報告してください。

于 2014-09-16T08:59:16.450 に答える