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 - nullvalues.
- 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?