Javascript 如何在web浏览器中检测设备是否有陀螺仪?

Javascript 如何在web浏览器中检测设备是否有陀螺仪?,javascript,mobile,3d,accelerometer,gyroscope,Javascript,Mobile,3d,Accelerometer,Gyroscope,我正在使用THREE.js创建一个web应用程序,用户可以在其中旋转设备,场景也会随之移动。类似于 我在区分有陀螺仪和没有陀螺仪的设备时遇到了一个问题 检测根本没有方位传感器的设备很容易。DeviceOrientationEvent的所有alpha、beta、gamma值均为空。但是,如果移动设备没有陀螺仪,它仍然会在设备定向事件中给出alpha、beta、gamma值。问题是这些值非常嘈杂,会在场景中造成大量的抖动。因此,我想禁用这些设备的设备方向。但是,到目前为止,我还没有找到如何辨别数据是

我正在使用THREE.js创建一个web应用程序,用户可以在其中旋转设备,场景也会随之移动。类似于

我在区分有陀螺仪和没有陀螺仪的设备时遇到了一个问题

检测根本没有方位传感器的设备很容易。DeviceOrientationEvent的所有alpha、beta、gamma值均为空。但是,如果移动设备没有陀螺仪,它仍然会在设备定向事件中给出alphabetagamma值。问题是这些值非常嘈杂,会在场景中造成大量的抖动。因此,我想禁用这些设备的设备方向。但是,到目前为止,我还没有找到如何辨别数据是否来自陀螺仪或加速度计(这是我对数据来源的猜测)

我不知道这是否有帮助,但我们可以看到一个很好的例子,说明如何处理这个问题。(按下底部的类轴图标;您必须在没有陀螺仪和陀螺仪的设备上看到它才能看到差异)。他们对没有陀螺仪的设备所做的只是更新俯仰滚动。使用手机旋转时,偏航不会更新

所以,这是绝对可能的,但我还没有发现,即使在搜索了很多。如果有人能帮忙,那就太好了

非常感谢

编辑:
在只有加速计的设备上,如MOTO E,所有值均为空-设备方向事件旋转速率——只有加速度除外,包括重力。但是,我之前测试的设备,没有陀螺仪,但仍然给出了设备定向事件的α、β、γ值,似乎有2个加速度计。这就是为什么我怀疑它能够提供DeviceOrientationEvent数据的原因,尽管数据很嘈杂。看起来2个加速计不足以给出旋转速度;)

如果要检查陀螺仪是否存在,请检查只有陀螺仪才能测量的参数。例如,旋转速率是只有陀螺仪才能测量的

请看一个示例代码,其中说明是否存在陀螺仪:

var gyroPresent = false;
window.addEventListener("devicemotion", function(event){
    if(event.rotationRate.alpha || event.rotationRate.beta || event.rotationRate.gamma)
        gyroPresent = true;
});
希望这有帮助

编辑: 请注意:此处使用设备运动事件,因为只能从该事件访问旋转率(和加速度等)。OP仅尝试了DeviceOrientationEvent,因此值得一提。

现代解决方案:

if (window.DeviceOrientationEvent) {
  // gyro exist
}

哇!这真是奇迹D非常感谢!我没有想到要检查任何其他事件。我在互联网上找不到任何解决这个问题的方法。再次感谢。它不起作用了。在没有陀螺仪的桌面浏览器中试试这个。你会实现的。