ViewTransition: ready-Eigenschaft
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Die ready
-Eigenschaft, eine schreibgeschützte Eigenschaft des ViewTransition
-Interfaces, ist ein Promise
, das erfüllt wird, sobald der Pseudoelementbaum erstellt wurde und die Übergangsanimation kurz vor dem Start steht.
ready
wird abgelehnt, wenn der Übergang nicht beginnen kann. Dies kann durch eine Fehlkonfiguration verursacht werden, zum Beispiel durch doppelte view-transition-name
, oder wenn der an Document.startViewTransition()
übergebene Rückruf eine Ausnahme auslöst oder ein abgelehntes Promise zurückgibt.
Wert
Ein Promise.
Beispiele
Im folgenden Beispiel wird ready
verwendet, um einen benutzerdefinierten, kreisförmigen Anzeigeübergang auszulösen, der von der Position des Cursors des Benutzers bei einem Klick ausgeht, mit einer Animation, die von der Web Animations API bereitgestellt wird.
// Store the last click event
let lastClick;
addEventListener("click", (event) => (lastClick = event));
function spaNavigate(data) {
// Fallback for browsers that don't support this API:
if (!document.startViewTransition) {
updateTheDOMSomehow(data);
return;
}
// Get the click position, or fallback to the middle of the screen
const x = lastClick?.clientX ?? innerWidth / 2;
const y = lastClick?.clientY ?? innerHeight / 2;
// Get the distance to the furthest corner
const endRadius = Math.hypot(
Math.max(x, innerWidth - x),
Math.max(y, innerHeight - y),
);
// Create a transition:
const transition = document.startViewTransition(() => {
updateTheDOMSomehow(data);
});
// Wait for the pseudo-elements to be created:
transition.ready.then(() => {
// Animate the root's new view
document.documentElement.animate(
{
clipPath: [
`circle(0 at ${x}px ${y}px)`,
`circle(${endRadius}px at ${x}px ${y}px)`,
],
},
{
duration: 500,
easing: "ease-in",
// Specify which pseudo-element to animate
pseudoElement: "::view-transition-new(root)",
},
);
});
}
Diese Animation erfordert auch das folgende CSS, um die Standard-CSS-Animation zu deaktivieren und zu verhindern, dass die alten und neuen Ansichtsstatus in irgendeiner Weise ineinander überblenden (der neue Status "wischt" über den alten Status hinweg, anstatt hineinzutransitionieren):
::view-transition-image-pair(root) {
isolation: auto;
}
::view-transition-old(root),
::view-transition-new(root) {
animation: none;
mix-blend-mode: normal;
display: block;
}
Spezifikationen
Specification |
---|
CSS View Transitions Module Level 1 # dom-viewtransition-ready |
Browser-Kompatibilität
BCD tables only load in the browser