标准化设备方向数据

Cha*_*les 1 javascript android device-orientation ios gyroscope

我在 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>
Run Code Online (Sandbox Code Playgroud)

开始时 Android 打印 0 0 270 和 iOS 0 0 0。

然后,当我以相同的方式移动两者时,它们不会打印相同的值。

有人可以解释原因,以及是否有办法对数据进行规范化。

更新 #1

我已经尝试了一些校准,我关心风景/肖像。要复现,可以拿上面的代码,把ipad和nexus7竖着放在你面前。校准两者的值(第一个按钮)。然后取平板电脑的右角并旋转它,直到平板电脑达到 90 度。平板电脑应该在左侧。

在 Android 上,伽玛从 0 到 -80,然后跳到 270。在 IOS 上,伽玛从 0 到 -180 没有任何跳跃。

ric*_*cht 5

全倾斜 JS规范了 Android 和 iOS 设备方向实现之间的数据值。它还确保在用户旋转屏幕时设备方向数据保持一致。

本文总结了 Full Tilt JS 库中使用的一些技术。

免责声明:我是上述文章和图书馆的作者。请尝试并直接在 Github 项目上报告任何问题。