ViewTransition
Baseline
2025
Newly available
Since October 2025, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Giao diện ViewTransition của View Transition API đại diện cho một view transition đang hoạt động, cung cấp chức năng để phản ứng khi transition đạt đến các trạng thái khác nhau (ví dụ: sẵn sàng chạy hoạt ảnh, hoặc hoạt ảnh đã hoàn thành) hoặc bỏ qua transition hoàn toàn.
Kiểu đối tượng này được cung cấp theo các cách sau:
- Qua thuộc tính
Document.activeViewTransition. Đây cung cấp cách nhất quán để truy cập view transition đang hoạt động trong bất kỳ ngữ cảnh nào, mà không phải lo lắng về việc lưu nó để dễ dàng truy cập sau. - Trong trường hợp các transition cùng tài liệu (SPA), nó cũng được trả về bởi phương thức
document.startViewTransition(). - Trong trường hợp các transition liên tài liệu (MPA), nó cũng được cung cấp:
- Trong trang đang rời đi qua thuộc tính
PageSwapEvent.viewTransitioncủa đối tượng sự kiệnpageswap. - Trong trang đến qua thuộc tính
PageRevealEvent.viewTransitioncủa đối tượng sự kiệnpagereveal.
- Trong trang đang rời đi qua thuộc tính
Khi một view transition được kích hoạt bởi lệnh gọi startViewTransition() (hoặc điều hướng trang trong trường hợp MPA transitions), một chuỗi các bước được thực hiện như được giải thích trong Quá trình view transition. Điều này cũng giải thích khi nào các promise khác nhau được hoàn thành.
Thuộc tính phiên bản
ViewTransition.finishedRead only-
Một
Promiseđược hoàn thành khi hoạt ảnh transition kết thúc và chế độ xem trang mới hiển thị và có thể tương tác với người dùng. ViewTransition.readyRead only-
Một
Promiseđược hoàn thành sau khi cây pseudo-element được tạo và hoạt ảnh transition sắp bắt đầu. ViewTransition.typesRead only-
Một
ViewTransitionTypeSetcho phép các kiểu được đặt trên view transition được truy cập và sửa đổi. ViewTransition.updateCallbackDoneRead only-
Một
Promiseđược hoàn thành khi promise được trả về bởi callback của phương thứcdocument.startViewTransition()được hoàn thành.
Phương thức phiên bản
skipTransition()-
Bỏ qua phần hoạt ảnh của view transition, nhưng không bỏ qua việc chạy callback
document.startViewTransition()cập nhật DOM.
Ví dụ
Trong ví dụ SPA sau, promise ViewTransition.ready được dùng để kích hoạt một view transition tiết lộ hình tròn tùy chỉnh tỏa ra từ vị trí con trỏ của người dùng khi nhấp, với hoạt ảnh được cung cấp bởi Web Animations API.
// 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)",
},
);
});
}
Hoạt ảnh này cũng yêu cầu CSS sau để tắt hoạt ảnh CSS mặc định và ngăn các trạng thái xem cũ và mới hòa trộn theo bất kỳ cách nào:
::view-transition-image-pair(root) {
isolation: auto;
}
::view-transition-old(root),
::view-transition-new(root) {
animation: none;
mix-blend-mode: normal;
display: block;
}
Thông số kỹ thuật
| Specification |
|---|
| CSS View Transitions Module Level 1> # viewtransition> |