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.
* Some parts of this feature may have varying levels of support.
Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。
ViewTransition はビュー遷移 API のインターフェイスで、ビュー遷移を表し、トランジションが様々な状態(例えば、アニメーションを実行する準備ができている、またはアニメーションが終了した)に達したときに反応する機能、またはトランジションを完全にスキップする機能を提供します。
このオブジェクト型は document.startViewTransition() メソッドが返します。 startViewTransition() が呼び出されると、ビュー遷移のプロセスで説明されている一連のステップに従います。これは様々なプロミスが履行されるタイミングについても説明しています。
インスタンスプロパティ
ViewTransition.finishedExperimental-
Promiseで、トランジションのアニメーションが完了し、新しいページビューがユーザーに表示され操作可能になると履行されます。 ViewTransition.readyExperimental-
Promiseで、擬似要素ツリーが作成され、トランジションのアニメーションが始まろうとすると履行されます。 ViewTransition.updateCallbackDoneExperimental-
Promiseで、document.startViewTransition()のコールバックが返すプロミスが履行されたときに履行されます。
インスタンスメソッド
skipTransition()Experimental-
ビュー遷移のアニメーション部分をスキップします。ただし、 DOM を更新する
document.startViewTransition()コールバックの実行はスキップしません。
例
次の例では、 ViewTransition.ready プロミスを使用して、クリック時のユーザーカーソルの位置から発生する独自の円形表示ビュー遷移を発生させ、 ウェブアニメーション API によってアニメーションが指定されています。
// 最後のクリックイベントを保存
let lastClick;
addEventListener("click", (event) => (lastClick = event));
function spaNavigate(data) {
// この API に対応していないブラウザーのためのフォールバック
if (!document.startViewTransition) {
updateTheDOMSomehow(data);
return;
}
// クリック位置を取得するか、画面の中央へフォールバックする
const x = lastClick?.clientX ?? innerWidth / 2;
const y = lastClick?.clientY ?? innerHeight / 2;
// 最も遠いコーナーまでの距離を取得
const endRadius = Math.hypot(
Math.max(x, innerWidth - x),
Math.max(y, innerHeight - y),
);
// トランジションを作成
const transition = document.startViewTransition(() => {
updateTheDOMSomehow(data);
});
// 擬似要素が作成されるのを待つ
transition.ready.then(() => {
// ルートの新しいビューをアニメーション
document.documentElement.animate(
{
clipPath: [
`circle(0 at ${x}px ${y}px)`,
`circle(${endRadius}px at ${x}px ${y}px)`,
],
},
{
duration: 500,
easing: "ease-in",
// アニメーションさせる擬似要素を指定
pseudoElement: "::view-transition-new(root)",
},
);
});
}
このアニメーションには以下の CSS も必要です。既定のアニメーションをオフにし、古いビューと新しいビューの状態が混ざり合わないようにします(新しい状態はビュー遷移の遷移ではなく、古い状態のすぐ上に「ワイプ」されます)。
::view-transition-image-pair(root) {
isolation: auto;
}
::view-transition-old(root),
::view-transition-new(root) {
animation: none;
mix-blend-mode: normal;
display: block;
}
仕様書
| Specification |
|---|
| CSS View Transitions Module Level 1> # viewtransition> |
ブラウザーの互換性
Loading…