OrientationSensor

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

OrientationSensor 接口是 传感器 API 的基类,用于方向传感器。此接口不能直接使用。它提供了由继承它的接口访问的属性和方法。

此功能可能会被您服务器上设置的 Permissions Policy 阻止。

EventTarget Sensor OrientationSensor

基于 OrientationSensor 的接口

以下是基于 OrientationSensor 接口的接口列表。

实例属性

OrientationSensor.quaternion 只读

返回一个包含四元素的 Array,其元素包含表示设备方向的单位四元数的组件。

实例方法

OrientationSensor.populateMatrix()

使用最新的传感器读数填充给定的对象,其中包含旋转矩阵。

示例

基本示例

下面的示例(大致基于 Intel 的 Orientation Phone 演示)以每秒 60 次的频率实例化了一个 AbsoluteOrientationSensor。每次读取时,它都使用 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", (error) => {
  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.");
  }
});

规范

规范
方向传感器
# orientationsensor-interface

浏览器兼容性