PageSwapEvent
Ограниченная доступность
Эта функция не относится к Baseline, так как она не работает в некоторых из наиболее широко используемых браузеров.
Объект события PageSwapEvent доступен внутри обработчиков событий pageswap.
Событие pageswap срабатывает при переходе между документами, когда предыдущий документ собирается загрузиться. Во время перехода между документами объект события PageSwapEvent позволяет управлять связанным переходом вида (переход вида) (предоставляя доступ к соответствующему объекту ViewTransition) из документа, из которого происходит переход, если переход вида был инициирован переходом. Он также предоставляет доступ к информации о типе перехода и текущем и целевом документах.
Конструктор
PageSwapEvent()-
Создаёт новый экземпляр объекта
PageSwapEvent.
Свойства экземпляра
-
activationТолько для чтения -
Содержит объект
NavigationActivation, содержащий тип перехода и записи текущей и целевой истории документов для перехода в рамках одного источника. Если в цепочке перенаправлений есть URL с другим источником, возвращаетnull. -
viewTransitionТолько для чтения -
Содержит объект
ViewTransition, представляющий активный переход вида для перехода между документами.
Примеры
window.addEventListener("pageswap", async (e) => {
// Only run this if an active view transition exists
if (e.viewTransition) {
const currentUrl = e.activation.from?.url
? new URL(e.activation.from.url)
: null;
const targetUrl = new URL(e.activation.entry.url);
// Going from profile page to homepage
// ~> The big img and title are the ones!
if (isProfilePage(currentUrl) && isHomePage(targetUrl)) {
// Set view-transition-name values on the elements to animate
document.querySelector(`#detail main h1`).style.viewTransitionName =
"name";
document.querySelector(`#detail main img`).style.viewTransitionName =
"avatar";
// Remove view-transition-names after snapshots have been taken
// Stops naming conflicts resulting from the page state persisting in BFCache
await e.viewTransition.finished;
document.querySelector(`#detail main h1`).style.viewTransitionName =
"none";
document.querySelector(`#detail main img`).style.viewTransitionName =
"none";
}
// Going to profile page
// ~> The clicked items are the ones!
if (isProfilePage(targetUrl)) {
const profile = extractProfileNameFromUrl(targetUrl);
// Set view-transition-name values on the elements to animate
document.querySelector(`#${profile} span`).style.viewTransitionName =
"name";
document.querySelector(`#${profile} img`).style.viewTransitionName =
"avatar";
// Remove view-transition-names after snapshots have been taken
// Stops naming conflicts resulting from the page state persisting in BFCache
await e.viewTransition.finished;
document.querySelector(`#${profile} span`).style.viewTransitionName =
"none";
document.querySelector(`#${profile} img`).style.viewTransitionName =
"none";
}
}
});
Примечание: См. Список сотрудников команды Chrome DevRel для демонстрации в реальном времени, из которой взят этот код.
Спецификации
| Спецификация |
|---|
| HTML # the-pageswapevent-interface |
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
PageSwapEvent |
128 | 128 | Нет | 114 | 18.2 | 128 | Нет | 85 | 18.2 | Нет | 128 |
PageSwapEvent |
124 | 124 | Нет | 110 | 18.2 | 124 | Нет | 82 | 18.2 | 27.0 | 124 |
activation |
124 | 124 | Нет | 110 | 18.2 | 124 | Нет | 82 | 18.2 | 27.0 | 124 |
viewTransition |
126 | 126 | Нет | 112 | 18.2 | 126 | Нет | 83 | 18.2 | Нет | 126 |
См. также
© 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/PageSwapEvent