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-додатків з підтримкою навігації браузера варто обробляти обидві події, pageshow та pagehide, для відстеження кешованих переходів. Це дозволяє динамічно керувати станом та оновленням контенту при навігації.

автор: Bond
Порада

Не використовуйте beforeunload як заміну для pagehide, оскільки beforeunload не підтримує властивість persisted і може обмежувати взаємодію з користувачем через попередження про закриття.

автор: Bond
Порада

Події pageshow і pagehide можуть зручно взаємодіяти з кешуванням HTTP та Service Workers, покращуючи швидкість завантаження та ефективність кешування на клієнтському боці.

автор: Bond

Синтаксис

window.addEventListener("pageshow", function(event) {
  // Код, що виконується при завантаженні сторінки
});

window.addEventListener("pagehide", function(event) {
  // Код, що виконується при вивантаженні сторінки
});

методи

Метод Опис
persisted Властивість подій `pageshow` та `pagehide`, яка визначає, чи сторінка була завантажена з кешу (значення `true`), що часто відбувається при використанні кнопок навігації браузера.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
4 1.5 5 15 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
37 18 4 4
Підтримка: серверні переглядачі
Переглядач Node.js Deno
- -

Приклади

+ запропонувати свій приклад у пісочниці

Цей приклад зберігає дані форми при виході зі сторінки (подія 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];
      }
    }
  }
});
автор: Bond

Тут відстежується стан користувацьких налаштувань: при виході стан зберігається в 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));
  }
});
автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід