Device Orientation
This lesson explains Device Orientation with clear examples, use cases, and best practices so you can use HTML5 APIs confidently in real web applications.
HTML5 Device Orientation API Overview
The HTML5 Device Orientation API allows web applications to detect how a
mobile device is physically positioned in space. It provides rotation data
from device sensors such as the accelerometer, gyroscope, and compass so
developers can build motion-aware web experiences.
Device orientation is commonly used in mobile games, compass apps,
augmented reality experiences, gesture-based interfaces, image viewers,
map interactions, and motion-controlled UI effects. Because orientation
data can expose sensitive sensor information, browsers may require HTTPS,
user permission, and mobile device support.
| Feature | Description |
| API Name | Device Orientation API |
| Main Event | deviceorientation |
| Related Event | devicemotion |
| Sensor Data | Alpha, beta, gamma rotation values. |
| Common Devices | Smartphones, tablets, and sensor-enabled devices. |
| Common Uses | Games, AR, compass, gestures, motion-based UI. |
Basic Device Orientation Example
// HTML5 Device Orientation API
function handleOrientation(event) {
const alpha = event.alpha;
const beta = event.beta;
const gamma = event.gamma;
console.log("Alpha:", alpha);
console.log("Beta:", beta);
console.log("Gamma:", gamma);
}
if ("DeviceOrientationEvent" in window) {
window.addEventListener(
"deviceorientation",
handleOrientation
);
} else {
console.log("Device Orientation API is not supported.");
}
This example listens for the deviceorientation event and
reads the device rotation values. The values can be used to rotate UI
elements, control games, or respond to physical device movement.
Device Orientation Values
The deviceorientation event provides three primary rotation
values: alpha, beta, and
gamma. These values describe how the device is rotated around
different axes.
| Value | Axis | Description | Typical Range |
alpha | Z-axis | Rotation around the vertical axis, similar to compass direction. | 0 to 360 |
beta | X-axis | Front-to-back tilt of the device. | -180 to 180 |
gamma | Y-axis | Left-to-right tilt of the device. | -90 to 90 |
absolute | Orientation Source | Indicates whether the orientation data is absolute. | true or false |
iOS Permission Example
On iOS Safari, device orientation access usually requires permission from
a user gesture such as clicking a button. Always request permission only
when the user starts a motion-based feature.
// Request Device Orientation permission on iOS
async function enableOrientation() {
if (
typeof DeviceOrientationEvent !== "undefined" &&
typeof DeviceOrientationEvent.requestPermission === "function"
) {
try {
const permission =
await DeviceOrientationEvent.requestPermission();
if (permission === "granted") {
window.addEventListener(
"deviceorientation",
handleOrientation
);
}
} catch (error) {
console.error("Permission error:", error);
}
} else {
window.addEventListener(
"deviceorientation",
handleOrientation
);
}
}
document
.querySelector("#enable-motion")
.addEventListener("click", enableOrientation);
This example checks whether permission is required. If required, it asks
the user for access before listening to device orientation events.
Rotate Element with Device Tilt
<button id="enable-motion">
Enable Motion
</button>
<div id="box">
Tilt Me
</div>
<script>
const box = document.querySelector("#box");
function handleOrientation(event) {
const gamma = event.gamma || 0;
const beta = event.beta || 0;
box.style.transform =
"rotateX(" + beta + "deg) " +
"rotateY(" + gamma + "deg)";
}
async function enableOrientation() {
if (
typeof DeviceOrientationEvent !== "undefined" &&
typeof DeviceOrientationEvent.requestPermission === "function"
) {
const permission =
await DeviceOrientationEvent.requestPermission();
if (permission === "granted") {
window.addEventListener(
"deviceorientation",
handleOrientation
);
}
} else {
window.addEventListener(
"deviceorientation",
handleOrientation
);
}
}
document
.querySelector("#enable-motion")
.addEventListener("click", enableOrientation);
</script>
This example rotates an HTML element based on the device's front-to-back
and left-to-right tilt. It also supports permission-based browsers.
Device Motion vs Device Orientation
Device Orientation and Device Motion are related but different APIs.
Orientation describes rotation, while motion describes acceleration and
movement forces.
| API | Main Event | Measures | Common Use |
| Device Orientation | deviceorientation | Rotation: alpha, beta, gamma. | Tilt controls, compass, AR. |
| Device Motion | devicemotion | Acceleration and rotation rate. | Shake detection, movement tracking. |
Device Motion Shake Detection Example
// Detect shake using Device Motion
let lastShakeTime = 0;
function handleMotion(event) {
const acceleration =
event.accelerationIncludingGravity;
if (!acceleration) {
return;
}
const totalMovement =
Math.abs(acceleration.x || 0) +
Math.abs(acceleration.y || 0) +
Math.abs(acceleration.z || 0);
const now = Date.now();
if (
totalMovement > 35 &&
now - lastShakeTime > 1000
) {
lastShakeTime = now;
console.log("Shake detected");
}
}
window.addEventListener(
"devicemotion",
handleMotion
);
This example listens for device movement and detects a shake when the
combined acceleration exceeds a threshold. Real applications should tune
the threshold based on device testing.
Device Orientation API Use Cases
| Use Case | How Device Orientation Helps |
| Mobile Games | Control movement by tilting the device. |
| Compass Apps | Use orientation values for directional guidance. |
| Augmented Reality | Align virtual content with device orientation. |
| Image Galleries | Create parallax or tilt-based image effects. |
| Gesture Controls | Respond to physical movement patterns. |
| Accessibility Features | Offer alternative motion-based interactions when appropriate. |
Device Orientation Best Practices
- Request sensor permission only after a user action.
- Use feature detection before adding orientation listeners.
- Provide fallback controls for devices without motion sensors.
- Do not rely only on motion gestures for important actions.
- Throttle or debounce frequent sensor updates for performance.
- Respect user privacy and explain why sensor access is needed.
- Test on real mobile devices, not only desktop emulators.
- Remove event listeners when motion features are disabled.
Common Device Orientation Mistakes
- Assuming the API works on all browsers and devices.
- Requesting permission immediately on page load.
- Using motion controls without keyboard or touch alternatives.
- Ignoring iOS permission requirements.
- Not handling null orientation values.
- Updating the UI too frequently without performance control.
- Forgetting to remove listeners when no longer needed.
- Using sensor data without considering privacy expectations.
Key Takeaways
- The Device Orientation API reads physical device rotation.
- The main event is
deviceorientation. - Orientation values include
alpha, beta, and gamma. - iOS browsers may require explicit permission from a user gesture.
- Device Motion is related but measures acceleration and movement.
- Always provide fallback controls and respect user privacy.
Important Note
Device Orientation support varies by browser, operating system, device,
and permission settings. Always test on real devices, request permission
responsibly, and provide non-motion alternatives for users who cannot or
do not want to use motion-based controls.