Start · Sprachen · JavaScript · Referenz · ViewTransition.transitionRoot

ViewTransition.transitionRoot

Eigenschaft

Schreibgeschützte Eigenschaft, die das Wurzelelement liefert, auf das eine View Transition beschränkt ist – bei Dokument-Übergängen <code>document.documentElement</code>.

seit JavaScript Experimentell: Chromium-basierte Browser (Scoped V Kategorie: webapi

Signatur

ViewTransition.transitionRoot

Beschreibung

Die schreibgeschützte Eigenschaft transitionRoot eines ViewTransition-Objekts verweist auf das Wurzelelement des Übergangsbereichs. An diesem Element hängt der Pseudo-Element-Baum der Transition (::view-transition, ::view-transition-group() usw.). Nur dieser Teilbaum wird während der Animation erfasst und überlagert.

Wird ein Übergang klassisch mit document.startViewTransition() gestartet, ist transitionRoot das Element <html> (document.documentElement). Bei Scoped View Transitions, also mit element.startViewTransition(), ist es das Element, auf dem die Methode aufgerufen wurde. So können mehrere unabhängige Übergänge gleichzeitig in verschiedenen Bereichen der Seite laufen, etwa in einer Karte oder Liste, ohne den Rest der Seite zu blockieren.

Brauchen kannst du die Eigenschaft vor allem in generischem Code, der ein ViewTransition-Objekt übergeben bekommt und herausfinden muss, welcher Bereich betroffen ist. Typische Fälle: Während der Animation Klassen setzen, Interaktionen sperren, Übergänge protokollieren oder gezielt die Pseudo-Elemente eines bestimmten Bereichs per Web Animations API ansteuern.

Rückgabewert

Typ
Element
Beschreibung
Das Wurzelelement des Übergangsbereichs: bei Dokument-Übergängen document.documentElement, bei Scoped View Transitions das Element, auf dem startViewTransition() aufgerufen wurde.

Beispiele

Wurzel eines Dokument-Übergangs abfragen

if (document.startViewTransition) {
  const transition = document.startViewTransition(() => {
    document.body.classList.toggle('dark');
  });

  // Fallback, falls transitionRoot noch nicht unterstützt wird
  const root = transition.transitionRoot ?? document.documentElement;
  console.log(root.tagName);
  console.log(root === document.documentElement);
}
HTML true

Scoped View Transition auf einer Karte

const card = document.querySelector('#produkt-karte');

const updateCard = () => {
  card.querySelector('.preis').textContent = '19,99 €';
};

if (typeof card.startViewTransition === 'function') {
  const transition = card.startViewTransition(updateCard);
  console.log(transition.transitionRoot === card);
  console.log(transition.transitionRoot.id);
} else {
  updateCard(); // ohne Animation aktualisieren
}
true produkt-karte

Bereich während der Animation für Interaktionen sperren

const runScopedTransition = async (element, update) => {
  if (typeof element.startViewTransition !== 'function') {
    update();
    return;
  }

  const transition = element.startViewTransition(update);
  const root = transition.transitionRoot;

  root.setAttribute('inert', '');
  root.classList.add('is-transitioning');

  try {
    await transition.finished;
  } finally {
    root.removeAttribute('inert');
    root.classList.remove('is-transitioning');
    console.log(`Übergang in #${root.id} abgeschlossen`);
  }
};

const liste = document.querySelector('#todo-liste');
runScopedTransition(liste, () => liste.lastElementChild?.remove());
Übergang in #todo-liste abgeschlossen

// Wichtig · Fallstricke

  • Kompatibilität: transitionRoot kam zusammen mit den Scoped View Transitions (Element.prototype.startViewTransition()) und wird bisher nur in aktuellen Chromium-Browsern unterstützt. Firefox und Safari unterstützen zwar teils document.startViewTransition(), aber nicht unbedingt diese Eigenschaft. Prüfe die Unterstützung vorher, zum Beispiel mit 'transitionRoot' in ViewTransition.prototype, oder nutze ?? document.documentElement als Ersatzwert.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird still ignoriert oder wirft im Strict Mode einen TypeError.
  • Bei Scoped Transitions sollte das Wurzelelement Layout- bzw. Paint-Containment erhalten (z. B. contain: layout), sonst verhält sich der Übergang unerwartet. Die Pseudo-Elemente sprichst du in CSS über das Element an, z. B. #karte::view-transition-group(*).
  • Wird das Wurzelelement während des Übergangs aus dem DOM entfernt, bricht der Browser den Übergang ab. finished wird trotzdem erfüllt, ready kann dagegen abgelehnt werden.
  • Die Spezifikation (CSS View Transitions Level 2) ist noch in Arbeit. Name und Verhalten können sich noch ändern.