6

我正在寻找一种方法来检查设备是否支持DeviceOrientationEvent或DeviceMotionEvent。 更准确地说,我不想知道设备是否真的有加速度计检测设备运动/方向支持?

不幸的是window.DeviceMotionEventwindow.ondevicemotion分别window.DeviceOrientationEventwindow.ondeviceorientation存在虽然设备 - 的MacBook视网膜 - 没有加速度计。

我很清楚,如果Event从未被触发,eventlistener的回调函数也将永远不会运行。但就我而言,我的程序需要知道设备是否有加速度计,因为如果没有加速度计,用户应该会收到通知。

这篇文章的答案不幸的是没有为我的问题工作。

+0

我不知道'ondevicemotion'事件如何精确的,但它是可以接受的监听事件,如果是内没有接收到这样的事件,比方说,5秒,然后将设备是搁在一桌子上,有人用铁把握着,还是没有加速度计? –

+0

你说得对。这是一种可能的方式,我也想到了。这个解决方案有问题,我必须等待一段时间(只有一点点,因为'devicemotion'经常触发)来检查答案。在我的情况下,我真的需要从一开始就知道设备是否有加速度计,因为如果设备没有加速度计,用户会被转发到另一页... –

回答

2

鉴于你的程序需要有一个加速计功能的功能,我假设,如果有没有您阻止其执行。

所以,你的程序可以“块”默认情况下,听单个deviceMotionEvent将初始化整个程序,这将最终结合到window.ondevicemotion的。这样你不需要用setTimeout来阻止执行;一个deviceMotionEvent可能会在窗口加载后很快被触发。

+0

非常好的点@Prusprus。我认为这是解决这个问题的最佳方案...... –