javascript - 在不使用监听器的情况下获取设备方向(alpha、beta、gamma)?

标签 javascript html device-orientation

我正在使用 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 值,而不是附加回调?

最佳答案

我认为full-tilt图书馆将为您实现这一点。

github 页面上有一个简单的示例,展示了如何初始化基于 Promise 的库,然后在您的逻辑中,您只需在调用诸如 之类的方法之前检查设备方向对象是否存在(即 Promise 已实现) >deviceOrientation.getScreenAdjustedEuler()

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

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

如果 5 个月后您仍在研究它,那么这对于现在正在寻找的人来说可能更有用。

关于javascript - 在不使用监听器的情况下获取设备方向(alpha、beta、gamma)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498567/

相关文章:

javascript - JavaScript 中指向全局变量的指针

javascript - 我想在斐波那契数列的javascript中的字符串末尾添加逗号

javascript - 在新窗口中打开 iframe 中的链接

html - 将一个向右浮动的元素包裹在另一个元素下面

javascript - 标准化设备方向数据

ios - Mobile Safari 不显示 CSS 变换 rotateX 和 rotateY 仅 rotateZ

javascript - 如何使用 jQuery/Ajax 从 NTP 服务器获取时间

javascript - 无法读取未定义的 'onOverviewChange' 的属性

javascript - 使用 jQuery 添加 iframe 从 HTTP 到 HTTPS

android - 当方向改变时使用选项卡重新加载 Activity 时, fragment 被初始化两次