Signatur
Beschreibung
document.activeViewTransition gibt das ViewTransition-Objekt des Ansichtsübergangs zurück, der gerade auf dem Dokument läuft. Das gilt sowohl für Übergänge innerhalb desselben Dokuments, die mit document.startViewTransition() gestartet wurden, als auch für Übergänge zwischen Dokumenten (per CSS-Regel @view-transition { navigation: auto; }). Läuft kein Übergang, ist der Wert null.
Nützlich ist die Eigenschaft vor allem, wenn du den Rückgabewert von startViewTransition() nicht an alle Stellen weiterreichen kannst oder willst – etwa in Komponenten, Bibliotheken oder globalen Event-Handlern. Damit kannst du jederzeit prüfen, ob gerade eine Animation läuft, auf ihr Ende warten (finished), sie abbrechen (skipTransition()) oder ihre Typen (types) ändern.
Bei Übergängen zwischen Dokumenten stehen dir zwar auch event.viewTransition in den Events pageswap und pagereveal zur Verfügung. activeViewTransition bietet aber einen einheitlichen Zugriff von jeder Stelle im Code aus, solange der Übergang läuft.
Rückgabewert
ViewTransition oder null, wenn gerade kein Ansichtsübergang läuft.Beispiele
Prüfen, ob gerade ein Übergang läuft
const updateView = (renderFn) => {
// Keine API-Unterstützung: einfach direkt rendern
if (!document.startViewTransition) {
renderFn();
return;
}
// Laufenden Übergang abbrechen, bevor ein neuer startet
document.activeViewTransition?.skipTransition();
document.startViewTransition(renderFn);
};
updateView(() => {
document.querySelector('#content').textContent = 'Neue Ansicht';
});
console.log(document.activeViewTransition !== null);
Auf das Ende eines Übergangs warten, ohne die Referenz weiterzureichen
const waitForTransitionEnd = async () => {
const transition = document.activeViewTransition;
if (!transition) return;
try {
await transition.finished;
} catch {
// finished wird nicht verworfen, aber sicherheitshalber abfangen
}
};
// z. B. in einer Komponente, die Fokus erst nach der Animation setzen soll
const focusSearch = async () => {
await waitForTransitionEnd();
document.querySelector('#search')?.focus();
console.log('Fokus gesetzt');
};
focusSearch();
Übergangstyp bei einer Navigation zwischen Dokumenten ergänzen
// Erfordert im CSS: @view-transition { navigation: auto; }
window.addEventListener('pagereveal', () => {
const transition = document.activeViewTransition;
if (!transition) return;
const from = navigation.activation?.from?.url ?? '';
if (from.includes('/produkte/')) {
// CSS kann mit :active-view-transition-type(zurueck) reagieren
transition.types.add('zurueck');
}
console.log([...transition.types]);
});
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Eigenschaft ist sehr neu (Chromium ab Version 142) und noch nicht Baseline. Prüfe per
'activeViewTransition' in documentoder verwende optionale Verkettung (?.). Ohne Unterstützung ist der Wertundefined, nichtnull. - Der Wert ist nur während des Übergangs gesetzt. Nach dem Auflösen von
finishedoder nachskipTransition()ist er wiedernull. Speichere die Referenz also in einer Variablen, wenn du sie über mehrereawait-Schritte brauchst. - Pro Dokument kann immer nur ein Übergang aktiv sein. Ein neuer Aufruf von
startViewTransition()bricht den laufenden ab. Dessenready-Promise wird dann mit einemAbortErrorverworfen. - Die Eigenschaft ist schreibgeschützt. Zuweisungen werden ignoriert und werfen im Strict Mode einen Fehler.
- Bei Übergängen zwischen Dokumenten müssen beide Seiten denselben Ursprung haben und sich per
@view-transitiondafür anmelden.