在不使用侦听器的情况下获取设备方向(alpha、beta、gamma)
Get device orientation (alpha, beta, gamma) without using listener?
我正在使用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值,而不是附加回调?
我认为全倾斜库可以为您实现这一点。
github页面上有一个简单的例子,展示了如何初始化他们基于promise的库,然后在您的逻辑中,在调用deviceOrientation.getScreenAdjustedEuler()
等方法之前,只需检查设备定向对象是否存在(即promise是否已实现)。
你不必像他们的例子那样使用动画循环。
顺便说一句,您本可以在不丢失数据的情况下添加和删除事件侦听器。我肯定会这么做,而不是用冻结来禁用侦听器。一段时间以来,我一直在根据需要添加和删除侦听器,以获得初始状态,以便在以后需要不断更新时进行比较(或者更准确地说,在不需要更新时不订阅事件)。不过我还是会全力以赴。我使用它是因为它在设备之间提供了标准化的数据,但它几乎可以满足你的需求,可能会让你的代码更整洁。
如果5个月后你还在做这件事,是的,这可能对现在四处狩猎的人更有用处。
相关文章:
- ng映射方向备选方案
- 如何将不可变的js导入angular 2(alpha)
- RubyonRails——构建交互式接口应该朝哪个方向发展
- 需要帮助谷歌地图方向面板在FancyBox中显示
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 我怎样才能知道用户滑动的方向
- 使用谷歌地图API和phonegap显示当前位置+方向
- 用真或假初始化变量是否在 Javascript 中建立了内容的方向
- 带有自定义标记的谷歌地图方向APIv3
- 在角度方向的元素之前插入
- 更改D3方向力图中箭头标记的方向
- 如何(功能)检测浏览器是否支持WebM alpha透明度
- fullpage.js在滚动时更改滚动方向
- 基于谷歌地图API方向服务构建的替代路线
- 如何将字符串地址传递到传单路由机,以根据字符串地址获得方向
- 在画布中以相反方向移动矩形
- .show()不会改变效果或方向
- JavaScript位置/方向计算
- Microsoft Surface Pro 2 上的 JavaScript 设备方向:alpha 和 gamma 值切换
- 在不使用侦听器的情况下获取设备方向(alpha、beta、gamma)