目前,我遇到了同样的问题。在Chrome桌面版中,deviceorientation
事件似乎可以正常工作,但在Chrome Android中却无法使用。此外,在FireFox中情况则相反。
我不知道为什么会这样。但我可以建议尝试一个非常基本的方法和另一个解决方案,以使其在Chrome上(包括桌面版和Android版)以及FireFox上都能正常工作。
第一个方法是卸载您的Chrome浏览器,或只卸载其更新,然后重新安装它。这已经解决了我的手机上的deviceorientation
问题。
另一个方法如下:
您可以使用
OrientationSensor中的一个,即
AbsoluteOrientationSensor
和
RelativeOrientationSensor
,还可以使用
Sensor APIs之一,在Chrome Android上使其正常工作,并仍然将
deviceorientation
作为后备选项在它适用的地方(即Chrome desktop和FireFox Android)。就我所见,仅在Chrome中提供传感器API。这些
Sensor APIs
需要在安全环境中使用,如
https页面等(
https://www.w3.org/TR/secure-contexts/)。我想在web中添加更多关于设备定向测量绝对性的信息:正如这两个传感器api的名称所示,一个是用于绝对定向,即相对于地球真实北极的方向,另一个是相对定向。如果您从您的浏览器中获取
absolute
属性的值为
true
,则可以通过
deviceorientation
事件来实现绝对性。如果您的设备理论上没有
磁力计,则该值将为
false
。此外,移动版Safari不关心此属性。哎呀!它有另一个属性
webkitCompassHeading
,您可以在
Apple Developer和
MDN中看到它的介绍,但在规范本身中没有提到。同样,在
deviceorientation
事件规范中,有关两个不同事物的提及未在Apple Developer或MDN{{link6:
compassneedscalibration
事件}}和{{link7:
deviceorientationabsolute
事件}}中提到。但是我在我的浏览器中没有看到它们中的任何一个。似乎没有人关心这些。
作为个人的补充说明,我认为这不应该那么复杂。只需将
absolute
属性值设置为
true
或
false
,然后
alpha
始终与真北或磁北的罗盘角度相关。
Sensor APIs
即将解决这些问题,但尚未实现太多。
结合Permissions API使用时,您必须按照以下方式使用(来自MDN示例):
const sensor = new AbsoluteOrientationSensor();
Promise.all([navigator.permissions.query({ name: "accelerometer" }),
navigator.permissions.query({ name: "magnetometer" }),
navigator.permissions.query({ name: "gyroscope" })])
.then(results => {
if (results.every(result => result.state === "granted")) {
sensor.start();
...
} else {
console.log("No permissions to use AbsoluteOrientationSensor.");
}
});
这个API提供了四元数,是方向和旋转操作非常有用的对象,特别适用于使用three.js、babylonjs或类似引擎的情况。使用传感器的
onreading
事件处理程序或
reading
事件获取四元数,并在所选3D引擎的
渲染循环中使用它来更新
场景相机或其他对象的方向。
您可以查看一些示例代码,从开发者工具检查器(页面下方为AbsoluteOrientationSensor示例):
https://sensorbox.glitch.me
上面的评论中有一个建议,认为您必须使用https才能使设备方向事件起作用。根据我从这里了解到的规范
https://w3c.github.io/deviceorientation/#security-and-privacy,这是正确的,但是据我尝试,它也适用于http页面。而且,在您的情况和我的情况下,无论它是否在https页面中,它都不起作用。
希望它有所帮助,在当前传感器Web开发的最新技术状态下,这种情况有点混乱。
window.DeviceOrientationEvent
是否存在以确定它是否被支持?https://developers.google.com/web/fundamentals/native-hardware/device-orientation/ - Ouroborus