如何检测设备在网络浏览器中是否有陀螺仪
How do I detect if a device has a gyroscope in a web browser?
我正在使用THRE.js并创建一个web应用程序,用户可以在其中旋转设备,场景将相应地移动。类似的东西。
我在区分有陀螺仪的设备和没有陀螺仪的设备时遇到了问题。
检测根本没有方位传感器的设备很容易。DeviceOrientationEvent的所有alpha、beta和gamma值均为空。但是,如果移动设备没有陀螺仪,它仍然会在DeviceOrientationEvent中给出alpha、beta和gamma值。问题是这些值非常嘈杂,并且会导致场景中出现大量抖动。因此,我想禁用这些设备的设备方向。但是,到目前为止,我还没能找到如何判断数据是来自陀螺仪还是加速度计(这是我对数据来源的猜测)。
我不知道这是否有帮助,但这里可以看到一个很好的例子来说明如何处理这件事。(按下底部类似轴的图标;你必须在没有陀螺仪和陀螺仪的设备上看到它才能看到区别)。他们对没有陀螺仪的设备所做的只是更新俯仰和滚转。使用手机旋转时,偏航不会更新。
所以,这肯定是可能的,但我还没有发现,即使搜索了很多。如果有人能帮忙就太好了。
非常感谢。
编辑:
在只有加速度计的设备上,如MOTO E,所有值都为空-DeviceOrientationEvent和rotationRate-只有accelerationIncludedingGravity除外。但是,我之前测试的设备没有陀螺仪,但仍然为DeviceOrientationEvent提供α、β、γ值,根据";传感器";有关GSM Arena的详细信息。这就是我怀疑它能够提供DeviceOrientationEvent数据的原因,尽管有噪音。看起来2个加速度计不足以给出旋转速率;)
如果您想检查陀螺仪是否存在,请检查只有陀螺仪才能测量的参数。例如,只有陀螺仪才能测量转速。
看看一个说明陀螺仪是否存在的示例代码:
var gyroPresent = false;
window.addEventListener("devicemotion", function(event){
if(event.rotationRate.alpha || event.rotationRate.beta || event.rotationRate.gamma)
gyroPresent = true;
});
希望这能有所帮助!
编辑:
请注意:这里使用DeviceMotionEvent,因为只能从该事件访问旋转速率(和加速度等)。OP只尝试了DeviceOrientationEvent,因此值得一提。
现代解决方案:
if (window.DeviceOrientationEvent) {
// gyro exist
}
源
- 访问布局信息是否也会导致浏览器重排
- 当包含另一个asp文件时,是否也包含所有引用的样式和脚本页面
- 如何检测是否有溢出
- jQuery中是否内置了任何字符串格式化函数
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 测试索引值是否等于某个数字的倍数
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- YUI3 IO实用程序是否可以根据给定的内容类型标头值自动序列化数据
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 节点是否需要模块传递带有方括号的arg?这是个错误吗
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 是否可以禁用jquery中的单个单选按钮
- 是否可以从父类访问子类的属性
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- 如何让程序检查所选单词中是否有按键
- 用于检查数组中是否存在元素的javascript自定义方法
- 如何检测设备在网络浏览器中是否有陀螺仪
- 是否有可能在手机浏览器上使用陀螺仪传感器播放360度Html5视频?