Baseline Widely available
Die Page Visibility API bietet Ereignisse, auf die Sie lauschen können, um zu wissen, wann ein Dokument sichtbar oder versteckt wird, sowie Funktionen, um den aktuellen Sichtbarkeitszustand der Seite zu prüfen.
Dies ist besonders nützlich, um Ressourcen zu sparen und die Leistung zu verbessern, indem eine Seite unnötige Aufgaben vermeidet, wenn das Dokument nicht sichtbar ist.
Konzepte und NutzungWenn der Benutzer das Fenster minimiert, zu einem anderen Tab wechselt oder das Dokument vollständig von einem anderen Fenster verdeckt wird, sendet die API ein visibilitychange
-Ereignis, um den Listenern mitzuteilen, dass sich der Zustand der Seite geändert hat. Sie können das Ereignis erkennen und einige Aktionen ausführen oder sich anders verhalten. Wenn Ihre Web-App beispielsweise ein Video abspielt, kann das Video pausiert werden, wenn der Benutzer den Tab in den Hintergrund legt, und die Wiedergabe fortsetzen, wenn der Benutzer zum Tab zurückkehrt. Der Benutzer verliert nicht seine Position im Video, der Soundtrack des Videos stört nicht den Ton im neuen Vordergrund-Tab, und der Benutzer verpasst keinen Teil des Videos in der Zwischenzeit.
Die Sichtbarkeitszustände eines <iframe>
sind die gleichen wie des übergeordneten Dokuments. Das Verstecken eines <iframe>
mit CSS-Eigenschaften (wie display: none;
) löst keine Sichtbarkeitsereignisse aus oder ändert den Zustand des Dokuments innerhalb des Frames.
Betrachten wir einige Anwendungsfälle für die Page Visibility API.
Entwickler haben historisch gesehen unvollständige Ersatzlösungen verwendet, um dies zu erkennen. Zum Beispiel hilft es, auf blur
und focus
-Ereignisse des Fensters zu achten, um zu wissen, wenn Ihre Seite nicht die aktive Seite ist, aber es sagt Ihnen nicht, dass Ihre Seite dem Benutzer tatsächlich verborgen ist. Die Page Visibility API adressiert dies.
Hinweis: Während onblur
und onfocus
Ihnen mitteilen, ob der Benutzer die Fenster wechselt, bedeutet das nicht unbedingt, dass es verborgen ist. Seiten werden nur dann verborgen, wenn der Benutzer Tabs wechselt oder das Browserfenster mit dem Tab minimiert.
Unabhängig von der Page Visibility API haben Benutzeragenten typischerweise eine Reihe von Richtlinien zur Minderung des Leistungsaufwands von Hintergrund- oder versteckten Tabs. Diese können umfassen:
requestAnimationFrame()
-Rückrufe an Hintergrund-Tabs oder versteckte <iframe>
s zu senden, um die Leistung und die Akkulaufzeit zu verbessern.setTimeout()
werden in Hintergrund-/inaktiven Tabs gedrosselt, um die Leistung zu verbessern. Siehe Reasons for delays longer than specified für weitere Details.Einige Prozesse sind von diesem Drosselverhalten ausgenommen. In diesen Fällen können Sie die Page Visibility API verwenden, um die Leistungsbeeinträchtigung der Tabs zu reduzieren, während sie verborgen sind.
Die Page Visibility API fügt der Document
-Schnittstelle die folgenden Eigenschaften hinzu:
Document.hidden
Schreibgeschützt
Gibt true
zurück, wenn die Seite in einem Zustand ist, der als verborgen für den Benutzer gilt, und false
andernfalls.
Document.visibilityState
Schreibgeschützt
Ein String, der den aktuellen Sichtbarkeitsstatus des Dokuments anzeigt. Mögliche Werte sind:
visible
Der Seiteninhalt kann zumindest teilweise sichtbar sein. In der Praxis bedeutet dies, dass die Seite der Vordergrund-Tab eines nicht-minimierten Fensters ist.
hidden
Der Inhalt der Seite ist für den Benutzer nicht sichtbar, entweder weil der Tab des Dokuments im Hintergrund ist oder Teil eines minimierten Fensters oder weil der Bildschirm des Geräts ausgeschaltet ist.
Die Page Visibility API fügt der Document
-Schnittstelle die folgenden Ereignisse hinzu:
visibilitychange
Wird ausgelöst, wenn der Inhalt eines Tabs sichtbar geworden ist oder versteckt wurde.
Dieses Beispiel paust das abspielende Audio, wenn die Seite versteckt wird, und setzt das Abspielen fort, wenn die Seite wieder sichtbar wird. Die <audio>
-Elementsteuerungen erlauben dem Benutzer, zwischen abspielendem und pausiertem Audio zu wechseln. Der boolesche playingOnHide
wird verwendet, um zu verhindern, dass Audio abspielt, wenn der Seitenstatus visible
wird, wenn die Medien beim Verstecken der Seite nicht gespielt wurden.
<audio
controls
src="https://mdn.github.io/webaudio-examples/audio-basics/outfoxing.mp3"></audio>
JavaScript
const audio = document.querySelector("audio");
let playingOnHide = false;
document.addEventListener("visibilitychange", () => {
if (document.hidden) {
playingOnHide = !audio.paused;
audio.pause();
} else if (playingOnHide) {
// Page became visible! Resume playing if audio was "playing on hide"
audio.play();
}
});
Ergebnis Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4