PageSwapEvent
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.
Das PageSwapEvent
-Ereignisobjekt steht innerhalb von Handler-Funktionen für das pageswap
-Ereignis zur Verfügung.
Das pageswap
-Ereignis wird ausgelöst, wenn Sie über Dokumente hinweg navigieren und das vorherige Dokument kurz vor dem Entladen steht. Während einer Navigation zwischen Dokumenten ermöglicht das PageSwapEvent
-Ereignisobjekt Ihnen, die zugehörige View Transition (mit Zugriff auf das relevante ViewTransition
-Objekt) vom Dokument aus zu manipulieren, von dem weggewechselt wird, falls die Navigation eine View-Transition ausgelöst hat. Es bietet auch Zugriff auf Informationen über den Navigationstyp sowie über das aktuelle und das Ziel-Dokument.
Konstruktor
PageSwapEvent()
Experimentell-
Erzeugt eine neue Instanz des
PageSwapEvent
-Objekts.
Instanzeigenschaften
activation
Nur lesbar Experimentell-
Enthält ein
NavigationActivation
-Objekt, das den Navigationstyp sowie die Einträge der aktuellen und Ziel-Dokument-Historie für eine Navigation mit derselben Herkunft enthält. Wenn die Navigation eine Cross-Origin-URL in der Redirect-Kette hat, gibt esnull
zurück. viewTransition
Nur lesbar Experimentell-
Enthält ein
ViewTransition
-Objekt, das die aktive View-Transition für die cross-dokumentarische Navigation darstellt.
Beispiele
window.addEventListener("pageswap", async (e) => {
// Only run this if an active view transition exists
if (e.viewTransition) {
const currentUrl = e.activation.from?.url
? new URL(e.activation.from.url)
: null;
const targetUrl = new URL(e.activation.entry.url);
// Going from profile page to homepage
// ~> The big img and title are the ones!
if (isProfilePage(currentUrl) && isHomePage(targetUrl)) {
// Set view-transition-name values on the elements to animate
document.querySelector(`#detail main h1`).style.viewTransitionName =
"name";
document.querySelector(`#detail main img`).style.viewTransitionName =
"avatar";
// Remove view-transition-names after snapshots have been taken
// Stops naming conflicts resulting from the page state persisting in BFCache
await e.viewTransition.finished;
document.querySelector(`#detail main h1`).style.viewTransitionName =
"none";
document.querySelector(`#detail main img`).style.viewTransitionName =
"none";
}
// Going to profile page
// ~> The clicked items are the ones!
if (isProfilePage(targetUrl)) {
const profile = extractProfileNameFromUrl(targetUrl);
// Set view-transition-name values on the elements to animate
document.querySelector(`#${profile} span`).style.viewTransitionName =
"name";
document.querySelector(`#${profile} img`).style.viewTransitionName =
"avatar";
// Remove view-transition-names after snapshots have been taken
// Stops naming conflicts resulting from the page state persisting in BFCache
await e.viewTransition.finished;
document.querySelector(`#${profile} span`).style.viewTransitionName =
"none";
document.querySelector(`#${profile} img`).style.viewTransitionName =
"none";
}
}
});
Hinweis: Siehe Liste der Chrome DevRel-Teammitglieder für die Live-Demo, aus der dieser Code stammt.
Spezifikationen
Specification |
---|
HTML Standard # the-pageswapevent-interface |
Browser-Kompatibilität
BCD tables only load in the browser