RelativeOrientationSensor - 描述了与地球的参考坐标系无关的设备物理方向

RelativeOrientationSensorSensor API 的接口,描述了与地球的参考坐标系无关的设备物理方向。

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

如果功能策略禁止使用功能,那是因为您的代码与服务器上设置的策略不一致。这种情况不会显示给用户。有关实现说明,请参见 Feature-Policy

构造函数

RelativeOrientationSensor.RelativeOrientationSensor()

创建一个新的 RelativeOrientationSensor 对象。

属性

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

事件处理程序

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

方法

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

实例

基础实例

以下实例大致基于 Intel 的 Orientation Phone 演示,以每秒 60 次的频率实例化了一个 RelativeOrientationSensor

请注意,基于此的英特尔演示使用了 AbsoluteOreintationSensor。每次读取时,它都会使用 RelativeOrientationSensor.quaternion 旋转手机的视觉模型。

const options = { frequency: 60, referenceFrame: 'device' };
const sensor = new RelativeOrientationSensor(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 RelativeOrientationSensor();
Promise.all([navigator.permissions.query({ name: "accelerometer" }),
             navigator.permissions.query({ name: "gyroscope" })])
       .then(results => {
         if (results.every(result => result.state === "granted")) {
           sensor.start();
           ...
         } else {
           console.log("没有使用 RelativeOrientationSensor 的权限。");
         }
   });

规范

规范 状态 备注
Orientation Sensor
RelativeOrientationSensor 的定义
候选推荐 初始定义。

桌面浏览器兼容性

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

移动浏览器兼容性

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