JS об'єкт PageTransitionEvent
Загальний опис
PageTransitionEvent – це події, які виникають при переходах між сторінками або перезавантаженні сторінки. До них відносяться pageshow та pagehide, які можуть бути корисними для відстеження моментів, коли сторінка завантажується або залишає активну область перегляду. Подія pageshow спрацьовує, коли сторінка завантажується або коли користувач повертається до неї за допомогою кнопки "Назад" або "Вперед" у браузері. Ця подія корисна для відновлення стану сторінки, збереженого при її вивантаженні. pagehide спрацьовує при закритті або перезавантаженні сторінки, а також коли користувач переходить на іншу сторінку.
Події PageTransitionEvent мають властивість persisted, яка вказує, чи була сторінка збережена в кеші. Якщо persisted дорівнює true, це означає, що сторінка повертається з "безпечного кешу", і всі дані можна швидко відновити, що особливо важливо для SPA-додатків або сайтів з інтенсивною взаємодією. Наприклад, для завантаження з кешу можна використати перевірку:
window.addEventListener("pageshow", function(event) {
if (event.persisted) {
console.log("Сторінка відновлена з кешу");
}
});
Використання pagehide може допомогти оптимізувати збереження стану, коли користувач покидає сторінку, особливо при обробці даних у великих застосунках. Наприклад, під час закриття сторінки можна відправити незбережені зміни на сервер або зберегти стан в localStorage:
window.addEventListener("pagehide", function(event) {
if (!event.persisted) {
localStorage.setItem("pageState", JSON.stringify(state));
}
});
автор: Bond
- Порада
-
При створенні SPA-додатків з підтримкою навігації браузера варто обробляти обидві події,
автор: Bondpageshowтаpagehide, для відстеження кешованих переходів. Це дозволяє динамічно керувати станом та оновленням контенту при навігації. - Порада
-
Не використовуйте
автор: Bondbeforeunloadяк заміну дляpagehide, оскількиbeforeunloadне підтримує властивістьpersistedі може обмежувати взаємодію з користувачем через попередження про закриття. - Порада
-
Події
автор: Bondpageshowіpagehideможуть зручно взаємодіяти з кешуванням HTTP таService Workers, покращуючи швидкість завантаження та ефективність кешування на клієнтському боці.
Синтаксис
window.addEventListener("pageshow", function(event) {
// Код, що виконується при завантаженні сторінки
});
window.addEventListener("pagehide", function(event) {
// Код, що виконується при вивантаженні сторінки
});
методи
| Метод | Опис |
|---|---|
| persisted | Властивість подій `pageshow` та `pagehide`, яка визначає, чи сторінка була завантажена з кешу (значення `true`), що часто відбувається при використанні кнопок навігації браузера. |
Переглядачі
| Переглядач | |||||
|---|---|---|---|---|---|
| 4 | 1.5 | 5 | 15 | 12 |
| Переглядач | ||||
|---|---|---|---|---|
| 37 | 18 | 4 | 4 |
| Переглядач | ||
|---|---|---|
| - | - |
Приклади
+ запропонувати свій приклад у пісочниці
Цей приклад зберігає дані форми при виході зі сторінки (подія pagehide) і відновлює їх при поверненні до сторінки з кешу (подія pageshow), що зручно, якщо користувач випадково покинув сторінку.
HTML
<input type="text" value="текст для прикладу">
JS
let formData = {};
document.querySelectorAll("input").forEach(input => {
input.addEventListener("input", (e) => {
formData[e.target.name] = e.target.value;
});
});
window.addEventListener("pagehide", function() {
sessionStorage.setItem("formData", JSON.stringify(formData));
});
window.addEventListener("pageshow", function(event) {
if (event.persisted) {
const savedData = JSON.parse(sessionStorage.getItem("formData"));
if (savedData) {
for (let key in savedData) {
document.querySelector(`[name=${key}]`).value = savedData[key];
}
}
}
});
Тут відстежується стан користувацьких налаштувань: при виході стан зберігається в localStorage, а при поверненні з кешу (з подією pageshow) завантажується назад. Це корисно для збереження персоналізованих налаштувань між сеансами.
let state = { userPreferences: {} };
window.addEventListener("pageshow", function(event) {
if (event.persisted) {
const savedState = JSON.parse(localStorage.getItem("pageState"));
if (savedState) {
state = savedState;
console.log("Сторінка відновлена з кешу:", state);
}
}
});
window.addEventListener("pagehide", function() {
if (!event.persisted) {
localStorage.setItem("pageState", JSON.stringify(state));
}
});
Коментарі
Коментарів ще немає — будьте першим!