ViewTransition
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: これは実験的な機能です。
本番で使用する前にブラウザー互換性一覧表をチェックしてください。
ViewTransition
はビュー遷移 API のインターフェースで、ビュー遷移を表し、トランジションが様々な状態(例えば、アニメーションを実行する準備ができている、またはアニメーションが終了した)に達したときに反応する機能、またはトランジションを完全にスキップする機能を提供します。
このオブジェクト型は document.startViewTransition()
メソッドが返します。 startViewTransition()
が呼び出されると、ビュー遷移のプロセスで説明されている一連のステップに従います。これは様々なプロミスが履行されるタイミングについても説明しています。
インスタンスプロパティ
ViewTransition.finished
Experimental-
Promise
で、トランジションのアニメーションが完了し、新しいページビューがユーザーに表示され操作可能になると履行されます。 ViewTransition.ready
Experimental-
Promise
で、擬似要素ツリーが作成され、トランジションのアニメーションが始まろうとすると履行されます。 ViewTransition.updateCallbackDone
Experimental-
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 |
ブラウザーの互換性
BCD tables only load in the browser