Web API見本市
センサーiOS独自requestPermissionスマホ推奨判定中...

Device Orientation API

端末の傾き(alpha/beta/gamma)をイベントで取得できるAPI。水準器やコンパス、モーション操作に使える。

MDNのドキュメントを見る

1対応判定

ブラウザ対応バージョン
Chrome9+
Firefox6+
Safari17+(13+はrequestPermission必須)

備考: iOSは明示許可フロー

2権限フロー

  1. 権限不要

    API呼び出しだけで動く。プロンプトも操作起点の縛りもない

  2. ユーザージェスチャー必須

    ボタンクリック等のユーザー操作の中でしか呼べない。プロンプトは出ない

  3. 権限プロンプトあり

    呼び出すとブラウザが許可/ブロックのプロンプトを表示し、ユーザーが選ぶ

  4. iOS独自requestPermissionこのAPI

    iOSではrequestPermission()を操作起点で呼び、明示的に許可を得る

iOS 13+ では DeviceOrientationEvent.requestPermission() をユーザージェスチャー内で呼び、明示的に許可を得る必要がある。他環境は権限不要。

3ライブデモ: 水準器とコンパス

4コードスニペット

TypeScript(要約版)
// iOS 13+ は明示的な許可が必要(クリックハンドラ内で呼ぶ)
async function start() {
  const D = DeviceOrientationEvent as unknown as {
    requestPermission?: () => Promise<"granted" | "denied">;
  };
  if (typeof D.requestPermission === "function") {
    const result = await D.requestPermission();
    if (result !== "granted") return;
  }
  window.addEventListener("deviceorientation", onOrient);
}

function onOrient(e: DeviceOrientationEvent) {
  const alpha = e.alpha; // Z軸: 0-360 コンパス方位に利用
  const beta = e.beta;   // X軸: -180-180 前後の傾き
  const gamma = e.gamma; // Y軸: -90-90 左右の傾き
  // 水準器: gamma/betaから気泡の位置を計算
  bubble.style.transform =
    "translate(" + gamma! * 3 + "px, " + beta! * 3 + "px)";
}

// 後始末
window.removeEventListener("deviceorientation", onOrient);