ViewTransition
Ограниченное использование
Данная функция не входит в Baseline, так как она не работает в некоторых из самых широко используемых браузеров.
Интерфейс ViewTransition API переходов между представлениями описывает активный переход между представлениями и предоставляет функциональность для реагирования на переход в различные состояния (например, готовность к запуску анимации или завершение анимации) или пропуск перехода.
Этот тип объекта доступен следующим образом:
- В случае переходов внутри одного документа (SPA) он возвращается методом
document.startViewTransition(). - В случае переходов между разными документами (MPA) он доступен:
- На выходящей странице через свойство объекта события
pageswapPageSwapEvent.viewTransition. - На входящей странице через свойство объекта события
pagerevealPageRevealEvent.viewTransition.
- На выходящей странице через свойство объекта события
Когда переход между представлениями инициируется вызовом startViewTransition() (или переходом на другую страницу в случае переходов между разными документами), выполняется последовательность шагов, описанных в Процессе перехода между представлениями. Там же описано, когда выполняются различные промисы.
Свойства экземпляра
-
ViewTransition.finishedТолько для чтения -
Промис
Promise, который выполняется, когда анимация перехода завершена, и новое представление страницы доступно и интерактивно для пользователя. -
ViewTransition.readyТолько для чтения -
Промис
Promise, который выполняется, когда псевдоэлементное дерево создано, и анимация перехода собирается начаться. -
ViewTransition.updateCallbackDoneТолько для чтения -
Промис
Promise, который выполняется, когда промис, возвращаемый обратным вызовом методаdocument.startViewTransition(), выполняется.
Методы экземпляра
skipTransition()-
Пропускает анимационную часть перехода между представлениями, но не пропускает выполнение обратного вызова
document.startViewTransition(), который обновляет DOM.
Примеры
В приведенном ниже примере SPA используется промис ViewTransition.ready для запуска пользовательской анимации кругового раскрытия представления, исходящей из позиции курсора пользователя при щелчке, с анимацией, предоставленной API 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)",
},
);
});
}
Для этой анимации также требуется следующий CSS, чтобы отключить стандартную анимацию CSS и остановить смешивание старого и нового состояний представления (новое состояние «накладывается» поверх старого состояния, а не переходит плавно):
::view-transition-image-pair(root) {
isolation: auto;
}
::view-transition-old(root),
::view-transition-new(root) {
animation: none;
mix-blend-mode: normal;
display: block;
}
Спецификации
Совместимость браузеров
| Десктопные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
ViewTransition |
111 | 111 | Нет | 97 | 18 | 111 | Нет | 75 | 18 | 22.0 | 111 |
finished |
111 | 111 | Нет | 97 | 18 | 111 | Нет | 75 | 18 | 22.0 | 111 |
ready |
111 | 111 | Нет | 97 | 18 | 111 | Нет | 75 | 18 | 22.0 | 111 |
skipTransition |
111 | 111 | Нет | 97 | 18 | 111 | Нет | 75 | 18 | 22.0 | 111 |
types |
125 | 125 | Нет | 111 | 18.2 | 125 | Нет | 83 | 18.2 | 27.0 | 125 |
updateCallbackDone |
111 | 111 | Нет | 97 | 18 | 111 | Нет | 75 | 18 | 22.0 | 111 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ViewTransition