From 7669d75d4693a4ee5e500fbe21716fb437adb3d6 Mon Sep 17 00:00:00 2001 From: Masahiro FUJIMOTO Date: Mon, 31 Jan 2022 00:54:33 +0900 Subject: 2021/10/14 時点の英語版に同期 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../events/detecting_device_orientation/index.md | 223 +++++++++------------ 1 file changed, 95 insertions(+), 128 deletions(-) (limited to 'files/ja') diff --git a/files/ja/web/events/detecting_device_orientation/index.md b/files/ja/web/events/detecting_device_orientation/index.md index 8b3ba1f82f..6cc124c770 100644 --- a/files/ja/web/events/detecting_device_orientation/index.md +++ b/files/ja/web/events/detecting_device_orientation/index.md @@ -1,53 +1,49 @@ --- -title: デバイスの方向の検出 +title: 端末の方向の検出 slug: Web/Events/Detecting_device_orientation tags: - API - - Device Orientation - - Firefox OS - - Intermediate + - 端末の方向 + - 中級者 - Mobile - Motion - - Orientation - - Reference + - 向き + - リファレンス - WebAPI translation_of: Web/Events/Detecting_device_orientation original_slug: Web/Events/Detecting_device_orientation --- -
{{SeeCompatTable}}
+{{SeeCompatTable}} -

Web を利用可能なデバイスは、自身の方向を特定できるようになってきました。つまりデバイスは、重力との関係による自身の向きの変化を示すデータを報告できます。特に携帯電話のようなハンドヘルドデバイスは、表示内容が直立し続けるよう自動的に回転させるためにこの情報を使用でき、画面の幅が高さより大きくなるようにデバイスを回転させたときは、Web コンテンツをワイドスクリーン表示にします。

+ウェブを利用可能な端末は、自身の**方向**を特定できるようになってきました。つまり端末は、重力との関係による自身の向きの変化を示すデータを報告できます。特に携帯電話のようなハンドヘルド端末は、表示内容が直立し続けるよう自動的に回転させるためにこの情報を使用でき、画面の幅が高さより大きくなるように端末を回転させたときは、ウェブコンテンツをワイドスクリーン表示にします。 -

方向の情報を制御する JavaScript イベントが 2 つあります。ひとつは {{domxref("DeviceOrientationEvent")}} であり、加速度センサーがデバイスの方向の変化を検出したときに発生します。Orientation イベントが報告するデータを受け取って処理することで、ユーザがデバイスを動かすことによる方向や高さの変化に対してインタラクティブに応答できるようになります。

+方向の情報を制御する JavaScript イベントが 2 つあります。ひとつは {{domxref("DeviceOrientationEvent")}} であり、加速度センサーが端末の方向の変化を検出したときに発生します。 orientation イベントが報告するデータを受け取って処理することで、ユーザが端末を動かすことによる方向や高さの変化に対してインタラクティブに応答できるようになります。 -

もうひとつのイベントは {{domxref("DeviceMotionEvent")}} であり、加速度が変化したときに発生します。こちらは方向ではなく加速度の変化を監視することが、{{domxref("DeviceOrientationEvent")}} との違いです。一般的に {{domxref("DeviceMotionEvent")}} を検出できるセンサーには、可動部があるストレージ装置を保護するためラップトップパソコンに内蔵するものも含みます。{{domxref("DeviceOrientationEvent")}} は、モバイルデバイスでとても一般的です。

+もうひとつのイベントは {{domxref("DeviceMotionEvent")}} であり、加速度が変化したときに発生します。こちらは方向ではなく加速度の変化を監視することが、{{domxref("DeviceOrientationEvent")}} との違いです。一般的に {{domxref("DeviceMotionEvent")}} を検出できるセンサーには、可動部があるストレージ装置を保護するためノートパソコンに内蔵するものも含みます。{{domxref("DeviceOrientationEvent")}} は、モバイル端末でとても一般的です。 -

orientation イベントを処理する

+## orientation イベントの処理 -

方向の変化を受け取り始めるには、{{event("deviceorientation")}} イベントをリッスンします:

+方向の変化を受け取り始めるには、{{event("deviceorientation")}} イベントをリッスンします: -
-

注記

-

parallax は、モバイルデバイスの加速度センサーやジャイロスコープのデータを正規化するためのポリフィルです。これは、デバイスの方向のサポート状況の違いを克服するのに役立ちます。

-
+> **Note:** [parallax](https://github.com/wagerfield/parallax) は、モバイル端末の加速度センサーやジャイロスコープのデータを正規化するためのポリフィルです。これは、端末の方向の対応状況の違いを克服するのに役立ちます。 -
window.addEventListener("deviceorientation", handleOrientation, true);
-
+```js +window.addEventListener("deviceorientation", handleOrientation, true); +``` -

イベントリスナ (この例では handleOrientation() という名前の JavaScript 関数) を登録すると、リスナ関数は最新の方向データとともに、周期的に呼び出されます。

+イベントリスナー (この例では handleOrientation() という名前の JavaScript 関数) を登録すると、リスナー関数は最新の方向データとともに、周期的に呼び出されます。 -

Orientation イベントは 4 つの値を持ちます:

+orientation イベントは 4 つの値を持ちます。 - +- {{domxref("DeviceOrientationEvent.absolute")}} +- {{domxref("DeviceOrientationEvent.alpha")}} +- {{domxref("DeviceOrientationEvent.beta")}} +- {{domxref("DeviceOrientationEvent.gamma")}} -

イベントハンドラ関数は以下のようなものです:

+イベントハンドラー関数は以下のようなものです。 -
function handleOrientation(event) {
+```js
+function handleOrientation(event) {
   var absolute = event.absolute;
   var alpha    = event.alpha;
   var beta     = event.beta;
@@ -55,34 +51,34 @@ original_slug: Web/Events/Detecting_device_orientation
 
   // 新たな方向データに基づいて処理を行う
 }
-
+``` -

方向として示される値

+### 方向として示される値 -

それぞれの軸で報告される値は、標準座標系の軸を中心にした回転量を表します。これらは方向および動きとして示されるデータの記事で詳しく説明しており、ここでは概要を記載します。

+それぞれの軸で報告される値は、標準座標系の軸を中心にした回転量を表します。これらは[方向および動きとして示されるデータ](/ja/docs/Web/Events/Orientation_and_motion_data_explained)の記事で詳しく説明しており、ここでは概要を記載します。 - +- {{domxref("DeviceOrientationEvent.alpha")}} の値は z 軸を中心にした端末の動きを表し、0 以上 360 未満の範囲による度数で表されます。 +- {{domxref("DeviceOrientationEvent.beta")}} の値は x 軸を中心にした端末の動きを表し、-180 以上 180 未満の範囲の値による度数で表されます。これは端末の前後の動きです。 +- {{domxref("DeviceOrientationEvent.gamma")}} の値は y 軸を中心にした端末の動きを表し、-90 以上 90 未満の範囲の値による度数で表されます。これは端末の左右の動きです。 -

+### 例 -

このサンプルは方向を検出可能なデバイス上で、{{event("deviceorientation")}} イベントをサポートするブラウザを実行する場合に動作します。

+このサンプルは方向を検出可能な端末上で、{{event("deviceorientation")}} イベントに対応するブラウザーで実行する場合に動作します。 -

庭にボールがあると考えます:

+庭にボールがあると考えてください。 -
<div class="garden">
-  <div class="ball"></div>
-</div>
+```html
+
+
+
-<pre class="output"></pre> -
+

+```
 
-

庭の幅は 200 ピクセルであり (小さな庭です)、ボールは中心にあります:

+庭の幅は 200 ピクセルであり (小さな庭です)、ボールは中心にあります。 -
.garden {
+```css
+.garden {
   position: relative;
   width : 200px;
   height: 200px;
@@ -99,11 +95,12 @@ original_slug: Web/Events/Detecting_device_orientation
   background: green;
   border-radius: 100%;
 }
-
+``` -

デバイスを動かすと、その動きに応じてボールが移動します:

+端末を動かすと、その動きに応じてボールが移動します。 -
var ball   = document.querySelector('.ball');
+```js
+var ball   = document.querySelector('.ball');
 var garden = document.querySelector('.garden');
 var output = document.querySelector('.output');
 
@@ -114,13 +111,13 @@ function handleOrientation(event) {
   var x = event.beta;  // -180 から 180 の範囲で角度を示す
   var y = event.gamma; // -90 から 90 の範囲で角度を示す
 
-  output.innerHTML  = "beta : " + x + "\n";
-  output.innerHTML += "gamma: " + y + "\n";
+  output.textContent  = `beta : ${x}\n`;
+  output.textContent += `gamma: ${y}\n`;
 
-  // デバイスをひっくり返したくはないため、
+  // 端末をひっくり返したくはないため、
   // x の値を -90 から 90 の範囲に制限する
-  if (x >  90) { x =  90};
-  if (x < -90) { x = -90};
+  if (x >  90) { x =  90};
+  if (x < -90) { x = -90};
 
   // 計算を容易にするため、x および y の値の範囲を
   // 0 から 180 に変換する
@@ -129,106 +126,76 @@ function handleOrientation(event) {
 
   // 10 は、ボールのサイズの半分である。
   // これにより、配置場所をボールの中心に合わせる
-  ball.style.top  = (maxX*x/180 - 10) + "px";
-  ball.style.left = (maxY*y/180 - 10) + "px";
+  ball.style.top  = (maxY*y/180 - 10) + "px";
+  ball.style.left = (maxX*x/180 - 10) + "px";
 }
 
 window.addEventListener('deviceorientation', handleOrientation);
-
+``` -

結果を以下に示します:

+{{LiveSampleLink("Orientation_example", "こちらをクリック")}}すると、新しいウィンドウでこの例を開きます。 {{domxref("Window/deviceorientation_event", "deviceorientation")}} はどのブラウザーでもオリジンをまたいだ {{HTMLElement("iframe")}} では動作しないからです。 -
{{EmbedLiveSample('Orientation_example', '230', '260')}}
+{{EmbedLiveSample('Orientation_example', '230', '260')}} -
-

警告: Chrome と Firefox では角度の扱い方が異なり、一部の軸の向きが逆になっています。

-
+## motion イベントの処理 -

motion イベントを処理する

+motion イベントは orientation イベントと同じ方法で扱えますが、イベント名は {{domxref("Window/devicemotion_event", "devicemotion")}} になります。 -

motion イベントは orientation イベントと同じ方法で扱えますが、イベント名は {{event("devicemotion")}} になります。

+```js +window.addEventListener("devicemotion", handleMotion, true); +``` -
window.addEventListener("devicemotion", handleMotion, true);
+実際どのように変化したかの情報は、_HandleMotion_ 関数の引数として渡す {{domxref("DeviceMotionEvent")}} オブジェクトが提供します。 -

実際どのように変化したかの情報は、HandleMotion 関数のパラメータとして渡す {{domxref("DeviceMotionEvent")}} オブジェクトが提供します。

+motion イベントは 4 つのプロパティを持ちます。 -

motion イベントは 4 つのプロパティを持ちます:

+- {{domxref("DeviceMotionEvent.acceleration")}} +- {{domxref("DeviceMotionEvent.accelerationIncludingGravity")}} +- {{domxref("DeviceMotionEvent.rotationRate")}} +- {{domxref("DeviceMotionEvent.interval")}} - +### 動きとして示される値 -

動きとして示される値

+{{domxref("DeviceMotionEvent")}} オブジェクトはウェブ開発者に、端末の位置や方向が変化した速度の情報を提供します。変化量は 3 つの軸 (詳しくは[方向および動きとして示されるデータ](/ja/docs/Web/Events/Orientation_and_motion_data_explained)をご覧ください) に沿って表します。 -

{{domxref("DeviceMotionEvent")}} オブジェクトは Web 開発者に、デバイスの位置や方向が変化した速度の情報を提供します。変化量は 3 つの軸 (詳しくは方向および動きとして示されるデータをご覧ください) に沿って表します。

+{{domxref("DeviceMotionEvent.acceleration","acceleration")}} および {{domxref("DeviceMotionEvent.accelerationIncludingGravity","accelerationIncludingGravity")}} で対応する軸は以下のとおりです。 -

{{domxref("DeviceMotionEvent.acceleration","acceleration")}} および {{domxref("DeviceMotionEvent.accelerationIncludingGravity","accelerationIncludingGravity")}} で対応する軸は以下のとおりです:

+- `x`: 西から東へ向かう軸を表します。 +- `y`: 南から北へ向かう軸を表します。 +- `z`: 地面から直立する軸を表します。 - +{{domxref("DeviceMotionEvent.rotationRate","rotationRate")}} では状況が若干異なります。こちらの情報はそれぞれ以下のように対応します: -

{{domxref("DeviceMotionEvent.rotationRate","rotationRate")}} では状況が若干異なります。こちらの情報はそれぞれ以下のように対応します:

+- `alpha`: スクリーン (デスクトップ環境ではキーボード) から直立する軸を表します。 +- `beta`: スクリーンの面 (デスクトップ環境ではキーボード) の左から右へ向かう軸に沿った回転量を表します。 +- `gamma`: スクリーンの面 (デスクトップ環境ではキーボード) の下から上へ向かう軸に沿った回転量を表します。 - +最後に {{domxref("DeviceMotionEvent.interval","interval")}} は、端末からデータを取得する間隔をミリ秒単位で表します。 -

最後に {{domxref("DeviceMotionEvent.interval","interval")}} は、デバイスからデータを取得する間隔をミリ秒単位で表します。

+## 仕様書 -

仕様

+| 仕様書 | 状態 | 備考 | +| -------------------------------------------- | ---------------------------------------- | ---------------------- | +| {{SpecName('Device Orientation')}} | {{Spec2('Device Orientation')}} | 初回定義 | - - - - - - - - - - - - - - - -
仕様書策定状況コメント
{{SpecName('Device Orientation')}}{{Spec2('Device Orientation')}}最初の仕様
-

ブラウザ実装状況

+## ブラウザーの互換性 -

DeviceMotionEvent

+### `DeviceMotionEvent` -

{{Compat("api.DeviceMotionEvent")}}

+{{Compat("api.DeviceMotionEvent")}} -

DeviceOrientationEvent

+### `DeviceOrientationEvent` -

{{Compat("api.DeviceOrientationEvent")}}

+{{Compat("api.DeviceOrientationEvent")}} -

関連情報

+## 関連情報 - +- {{domxref("DeviceOrientationEvent")}} +- {{domxref("DeviceMotionEvent")}} +- 古い [`MozOrientation`](/ja/docs/Web/Events/MozOrientation) イベント +- [方向および動きとして示されるデータ](/ja/docs/Web/Events/Orientation_and_motion_data_explained) +- [三次元座標変換での deviceorientation の使用](/ja/docs/Web/Events/Using_device_orientation_with_3D_transforms) +- [Cyber Orb: 端末の向きを使用した 2D 迷路ゲーム](/ja/docs/Games/Tutorials/HTML5_Gamedev_Phaser_Device_Orientation) - + -- cgit v1.2.3-54-g00ecf