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:

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.finished Read 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.ready Read 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.types Read only

Một ViewTransitionTypeSet cho phép các kiểu được đặt trên view transition được truy cập và sửa đổi.

ViewTransition.updateCallbackDone Read only

Một Promise được hoàn thành khi promise được trả về bởi callback của phương thức document.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.

js
// 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:

css
::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

Tương thích trình duyệt

Xem thêm