AbsoluteOrientationSensor - 描述了设备相对于地球参考坐标系的物理方向

AbsoluteOrientationSensorSensor API 的接口,描述了设备相对于地球参考坐标系的物理方向。

要使用此传感器,用户必须通过 Permissions API 授予 'accelerometer''gyroscope''magnetometer' 设备传感器权限。

如果功能策略阻止使用功能,则原因是您的代码与服务器上设置的策略不一致。它不会向用户显示出来。有关实施说明,请参阅 Feature-Policy

构造函数

AbsoluteOrientationSensor.AbsoluteOrientationSensor()

创建一个新的 AbsoluteOrientationSensor 对象。

属性

没有特有的属性;从其祖先接口 OrientationSensorSensor 继承了属性。

事件处理程序

没有特有的事件处理程序;从其祖先接口 Sensor 继承了方法。

方法

没有特有的方法;从其祖先接口 OrientationSensorSensor 继承了方法。

实例

以下实例大致基于 Intel 的 Orientation Phone 演示,以每秒 60 次的频率实例化了一个 AbsoluteOrientationSensor。每次读取时,它都会使用 OrientationSensor.quaternion 来旋转手机的视觉模型。

const options = { frequency: 60, referenceFrame: 'device' };
const sensor = new AbsoluteOrientationSensor(options);

sensor.addEventListener('reading', () => {
  // 模型是在其他地方实例化的 Three.js 对象。
  model.quaternion.fromArray(sensor.quaternion).inverse();
});
sensor.addEventListener('error', error => {
  if (event.error.name == 'NotReadableError') {
    console.log("传感器不可用。");
  }
});
sensor.start();

权限实例

使用方向传感器需要多个设备传感器的权限。因为 Permissions 使用了 Promise,所以请求权限的一种好方法是使用 Promise.all

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("没有使用 AbsoluteOrientationSensor 的权限。");
         }
   });

规范

规范 状态 备注
Generic Sensor API 候选推荐 定义了通用传感器。
Orientation Sensor
AbsoluteOrientationSensor 的定义
候选推荐 -

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
基础支持69≤79 未知 未知56 未知
AbsoluteOrientationSensor() 构造函数69≤79 未知 未知56 未知

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
基础支持6969 未知 未知 未知48 未知
AbsoluteOrientationSensor() 构造函数6969 未知 未知 未知48 未知