Signatur
Beschreibung
Mit screen.orientation.lock() legt man die Ausrichtung des Dokuments fest, z. B. auf Querformat. Danach dreht sich die Darstellung nicht mehr mit, wenn das Gerät gedreht wird. Das ist vor allem für Spiele, Videoplayer, Kamera-Apps oder Web-Apps mit festem Layout gedacht.
Die Methode gibt ein Promise zurück. Es wird erfüllt, sobald die Sperre greift, und abgelehnt, wenn der Browser, das Gerät oder der aktuelle Zustand keine Sperre erlaubt. In der Praxis klappt das Sperren meist nur, wenn das Dokument im Vollbildmodus läuft (Element.requestFullscreen()) oder als installierte PWA mit passendem display-Modus gestartet wurde. Auf Desktop-Browsern lehnen die meisten Implementierungen die Anfrage mit NotSupportedError ab.
Wieder aufheben lässt sich die Sperre mit ScreenOrientation.unlock(). Verlässt der Nutzer den Vollbildmodus, heben Browser die Sperre in der Regel automatisch auf. Auf Änderungen der Ausrichtung reagiert man mit dem change-Ereignis von screen.orientation.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $orientation Pflicht | "any" | "natural" | "landscape" | "portrait" | "portrait-primary" | "portrait-secondary" | "landscape-primary" | "landscape-secondary" | Die gewünschte Ausrichtung. "natural" ist die natürliche Ausrichtung des Geräts, "any" erlaubt jede Ausrichtung, "landscape"/"portrait" erlauben jeweils beide Varianten (primär und sekundär, also auch um 180° gedreht). |
Rückgabewert
Promise, das ohne Wert erfüllt wird, sobald die Sperre gilt. Abgelehnt wird es mit einer DOMException: NotSupportedError (Sperre nicht unterstützt), SecurityError (z. B. Dokument nicht aktiv oder in einer Sandbox ohne allow-orientation-lock), AbortError (durch einen weiteren lock()- oder unlock()-Aufruf abgebrochen) oder InvalidStateError (Dokument nicht vollständig aktiv).Beispiele
Vollbild öffnen und auf Querformat sperren
const playButton = document.querySelector('#play');
const player = document.querySelector('#player');
playButton.addEventListener('click', async () => {
try {
// Vollbild ist in den meisten Browsern Voraussetzung
await player.requestFullscreen();
await screen.orientation.lock('landscape');
console.log('Gesperrt auf:', screen.orientation.type);
} catch (err) {
console.warn(`Sperren nicht möglich: ${err.name} – ${err.message}`);
}
});
Funktionsprüfung mit Fallback
const lockOrientation = async (type) => {
if (!screen.orientation?.lock) {
console.info('Screen Orientation Lock wird nicht unterstützt.');
return false;
}
try {
await screen.orientation.lock(type);
return true;
} catch (err) {
if (err.name === 'NotSupportedError') {
console.info('Gerät/Kontext erlaubt keine Sperre (z. B. Desktop).');
}
return false;
}
};
const ok = await lockOrientation('portrait-primary');
console.log('Sperre aktiv:', ok);
Sperre beim Verlassen des Vollbilds aufheben
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement) {
screen.orientation.unlock();
console.log('Ausrichtung wieder frei');
}
});
screen.orientation.addEventListener('change', () => {
console.log('Neue Ausrichtung:', screen.orientation.type, screen.orientation.angle);
});
// Wichtig · Fallstricke
- Browser-Kompatibilität: Unterstützt wird die Methode vor allem von Chromium-Browsern auf Android und von Firefox für Android. Desktop-Browser lehnen sie meist mit
NotSupportedErrorab. Safari auf iOS bietetscreen.orientationseit 16.4,lock()ist dort aber nicht nutzbar. In TypeScript fehltlock()in neuerenlib.dom.d.ts-Versionen, deshalb ist eine eigene Typdeklaration nötig. - Vollbild nötig: Ohne Vollbildmodus oder installierte PWA schlägt der Aufruf in der Regel fehl.
requestFullscreen()braucht wiederum eine Nutzeraktion (Klick, Tippen). - Immer mit
try/catchoder.catch()aufrufen: Ein abgelehntesPromiseohne Fehlerbehandlung erzeugt einenunhandledrejection-Fehler. - In
<iframe>-Elementen mitsandboxfunktioniert die Sperre nur mit dem Tokenallow-orientation-lock. - Ein neuer
lock()- oderunlock()-Aufruf bricht ein noch offenesPromisemitAbortErrorab. - Das veraltete
screen.lockOrientation()ist nicht mehr zu verwenden.