【问题标题】:Get device orientation (alpha, beta, gamma) without using listener?在不使用侦听器的情况下获取设备方向(alpha、beta、gamma)?
【发布时间】:2015-12-28 18:13:12
【问题描述】:

我正在使用window.DeviceOrientationEvent 来监听设备方向的变化。但是,我想校准我的应用程序以报告相对于原始方向的方向变化相对。为此,我提出了以下解决方案:

originalOrientation.freeze = false;
window.addEventListener('deviceorientation', function(e){
            var orientation = {g: Math.round(e.gamma), b: Math.round(e.beta), a: Math.round(e.alpha), o: window.orientation || 0};
            if(!originalOrientation.freeze){
                originalOrientation = orientation;
                originalOrientation.freeze = true;
            }
        });

这实质上是采用deviceorientation 侦听器返回的第一个值并“冻结”它,因此它不会继续更新。我不喜欢这种方法,因为我宁愿在代码中的其他地方进行校准,而不是在收集实际方向的地方。我也不想两次附加监听器,因为回调中返回的值将丢失。

TLDR;

有没有办法我可以调用类似 window.getDeviceOrientation() 的方法来同步返回 alpha、beta 和 gamma 值,而不是附加回调?

【问题讨论】:

    标签: javascript html device-orientation


    【解决方案1】:

    我认为full-tilt 库会为您实现这一目标。

    github 页面上有一个简单的示例,它显示了您如何初始化基于承诺的库,然后在您的逻辑中,您只需在调用诸如 @987654322 之类的方法之前检查设备方向对象是否存在(即承诺已履行) @。

    您不必像他们的示例中那样使用动画循环。

    顺便说一句,您可以在不丢失数据的情况下添加和删除事件侦听器。我肯定会这样做,而不是通过冻结禁用侦听器。我根据需要添加和删除了一段时间的侦听器,以获取初始状态,以便在需要持续更新时与稍后进行比较(或者更准确地说,在不需要事件时不订阅事件)。不过,我仍然会选择全倾斜。我使用它是因为它提供了跨设备的标准化数据,但它几乎可以满足您的需求,并且可能会使您的代码更整洁。

    如果您在 5 个月后仍在努力,是的,这可能对现在四处寻找的人更有用。

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 1970-01-01
      • 2016-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-09
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多