For the complete documentation index, see llms.txt. This page is also available as Markdown.

Device Orientation

This controller uses the Device Orientation API to listen to changes in the physical orientation of a device (phone, tablet, etc.). It emits an updated event at a throttled rate containing the current rotation angles.

⚠️ Notes

  • This API is available only on mobile and tablet devices equipped with motion sensors.

  • On iOS (Safari), users must grant permission via a dialog triggered by a user gesture:

    if (typeof DeviceOrientationEvent.requestPermission === 'function') {
      await DeviceOrientationEvent.requestPermission();
    }
  • On desktop browsers, events may never fire or return null values.

  • For performance reasons, events are throttled by default (see throttleValue).

Usage


<div {{ stimulus_controller('@pwa/device-orientation', {throttle: 25}) }}>
  <p id="orientation-status">Waiting for orientation data…</p>
</div>

<script type="module">
  const el = document.querySelector('[data-controller="pwa__device-orientation"]');

  el.addEventListener('device-orientation:updated', (e) => {
    const { alpha, beta, gamma } = e.detail;
    document.getElementById('orientation-status').textContent =
      `α: ${alpha?.toFixed(1)}°, β: ${beta?.toFixed(1)}°, γ: ${gamma?.toFixed(1)}°`;
  });
</script>

Parameters

throttleValue: Intended to control how often updated events are dispatched to avoid spamming the UI.

Actions

None

Targets

None

Events

updated: Emitted each time the device orientation changes (subject to the throttle delay).

Contains an object with the information (values are in degrees):

  • absolute: boolean,

  • alpha: number | null,

  • beta: number | null,

  • gamma: number | null

Last updated

Was this helpful?