绝对方向传感器

有限可用性

此功能不是基线,因为它在某些使用最广泛的浏览器中无法使用。

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在某些或所有支持的浏览器中可用。

AbsoluteOrientationSensor接口是传感器 API的一部分,它描述了设备相对于地球参考坐标系的物理方向。

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

此功能可能会被服务器上设置的权限策略阻止。

EventTarget Sensor OrientationSensor AbsoluteOrientationSensor

构造函数

AbsoluteOrientationSensor()

创建一个新的AbsoluteOrientationSensor对象。

实例属性

没有特定的属性;继承自其祖先OrientationSensorSensor的属性。

实例方法

没有特定的方法;继承自其祖先OrientationSensorSensor的方法。

事件

没有特定的事件;继承自其祖先Sensor的方法。

示例

基本示例

以下示例(松散地基于英特尔的 Orientation Phone 演示)实例化了一个AbsoluteOrientationSensor,频率为每秒 60 次。在每次读取时,它使用OrientationSensor.quaternion来旋转手机的视觉模型。

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

sensor.addEventListener("reading", () => {
  // model is a Three.js object instantiated elsewhere.
  model.quaternion.fromArray(sensor.quaternion).inverse();
});
sensor.addEventListener("error", (event) => {
  if (event.error.name === "NotReadableError") {
    console.log("Sensor is not available.");
  }
});
sensor.start();

权限示例

使用方向传感器需要请求对多个设备传感器的权限。由于Permissions接口使用 Promise,因此请求权限的最佳方法是使用Promise.all

js
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.");
  }
});

规范

规范
方向传感器
# absoluteorientationsensor-interface

浏览器兼容性

BCD 表格仅在浏览器中加载