View Transition
Circle Reveal
…Masken-Übergang statt Crossfade. Der neue Snapshot wird als Kreis vom Klickpunkt aus enthüllt — dieselbe API, anderer Effekt.
Dark Studio
Klick den Button — der Theme-Wechsel öffnet als Kreis von der Klickposition.
btn.addEventListener("click", e => {
const x = e.clientX, y = e.clientY;
const end = Math.hypot(Math.max(x, innerWidth-x), Math.max(y, innerHeight-y));
if(!document.startViewTransition){ applyTheme(); return; }
const t = document.startViewTransition(applyTheme);
t.ready.then(() => {
document.documentElement.animate(
{ clipPath: [`circle(0px at ${x}px ${y}px)`, `circle(${end}px at ${x}px ${y}px)`] },
{ duration: 500, easing: "ease-in-out", pseudoElement: "::view-transition-new(root)" }
);
});
});
Trick: Root-Default abschalten (
animation:none auf den Pseudos), dann per documentElement.animate() den clipPath von circle(0) auf einen Radius, der die Ecke erreicht.