Spec-Zone.ru › Web APIs

Документ: событие visibilitychange

Базовая Широко доступно

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

  • Узнать больше
  • Полная совместимость
  • Отправить отзыв

Событие visibilitychange срабатывает в документе, когда содержимое его вкладки становится видимым или скрытым.

Событие не может быть отменено.

Синтаксис

Используйте имя события в методах, таких как addEventListener(), или задайте свойство обработчика событий.

addEventListener("visibilitychange", (event) => {});

onvisibilitychange = (event) => {};

Тип события

Общее Event.

Примечания по использованию

Событие не содержит обновленного статуса видимости документа, но вы можете получить эту информацию из свойства документа visibilityState.

Это событие срабатывает со значением visibilityState hidden при переходе пользователя на новую страницу, переключении вкладок, закрытии вкладки, минимизации или закрытии браузера или, на мобильных устройствах, переключении с браузера на другое приложение. Переход в hidden — это последнее событие, которое надёжно наблюдается страницей, поэтому разработчики должны рассматривать его как вероятный конец сессии пользователя (например, для отправки аналитических данных).

Переход в hidden также является хорошей точкой, в которой страницы могут прекратить обновление интерфейса и приостановить любые задачи, которые пользователь не хочет выполнять в фоновом режиме.

Примеры

Приостановление воспроизведения музыки при переходе в скрытое состояние

В этом примере воспроизведение аудио приостанавливается, когда страница скрыта, и возобновляется, когда страница становится видимой снова. Для получения полного примера см. документацию Page Visibility API: приостановка аудио при скрытии страницы.

document.addEventListener("visibilitychange", () => {
  if (document.hidden) {
    playingOnHide = !audio.paused;
    audio.pause();
  } else {
    // Resume playing if audio was "playing on hide"
    if (playingOnHide) {
      audio.play();
    }
  }
});

Отправка аналитики по окончании сессии при переходе в скрытое состояние

В этом примере переход в hidden рассматривается как окончание сессии пользователя, и соответствующие аналитические данные отправляются с помощью API Navigator.sendBeacon():

document.onvisibilitychange = () => {
  if (document.visibilityState === "hidden") {
    navigator.sendBeacon("/log", analyticsData);
  }
};

Спецификации

Спецификация
HTML
# event-visibilitychange
HTML
# handler-onvisibilitychange

Совместимость с браузерами

Десктопные Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
visibilitychange_event 62
33Свойство обработчика событий onvisibilitychange не поддерживается.
13Свойство обработчика событий onvisibilitychange не поддерживается.
18
12Свойство обработчика событий onvisibilitychange не поддерживается.
56 49
20Свойство обработчика событий onvisibilitychange не поддерживается.
15Свойство обработчика событий onvisibilitychange не поддерживается.
12.1–15Свойство обработчика событий onvisibilitychange не поддерживается.
14.1
14Событие visibilitychange не срабатывает при переходе с документа, поэтому необходимо также включить код для проверки события pagehide (которое срабатывает в таких случаях во всех современных браузерах). См. ошибку 116769, ошибку 151234, ошибку 151610 и ошибку 194897.
10.1["Событие visibilitychange не срабатывает при переходе с документа, поэтому необходимо также включить код для проверки события pagehide (которое срабатывает в таких случаях во всех современных браузерах). См. ошибку 116769, ошибку 151234, ошибку 151610 и ошибку 194897.", "До Safari 14 событие не распространялось, поэтому document.addEventListener('visibilitychange', ...) работало, но window.addEventListener('visibilitychange', ...) — нет."]
7["Событие visibilitychange не срабатывает при переходе с документа, поэтому необходимо также включить код для проверки события pagehide (которое срабатывает в таких случаях во всех современных браузерах). См. ошибку 116769, ошибку 151234, ошибку 151610 и ошибку 194897.", "До Safari 14 событие не распространялось, поэтому document.addEventListener('visibilitychange', ...) работало, но window.addEventListener('visibilitychange', ...) — нет.", "Свойство обработчика событий onvisibilitychange не поддерживается."]
62
33Свойство обработчика событий onvisibilitychange не поддерживается.
18Свойство обработчика событий onvisibilitychange не поддерживается.
56 46
20Свойство обработчика событий onvisibilitychange не поддерживается.
14Свойство обработчика событий onvisibilitychange не поддерживается.
12.1–14Свойство обработчика событий onvisibilitychange не поддерживается.
14.5
14Событие visibilitychange не срабатывает при переходе с документа, поэтому необходимо также включить код для проверки события pagehide (которое срабатывает в таких случаях во всех современных браузерах). См. ошибку 116769, ошибку 151234, ошибку 151610 и ошибку 194897.
10.3["Событие visibilitychange не срабатывает при переходе с документа, поэтому необходимо также включить код для проверки события pagehide (которое срабатывает в таких случаях во всех современных браузерах). См. ошибку 116769, ошибку 151234, ошибку 151610 и ошибку 194897.", "До Safari на iOS 14 событие не распространялось, поэтому document.addEventListener('visibilitychange', ...) работало, но window.addEventListener('visibilitychange', ...) — нет."]
7["Событие visibilitychange не срабатывает при переходе с документа, поэтому необходимо также включить код для проверки события pagehide (которое срабатывает в таких случаях во всех современных браузерах). См. ошибку 116769, ошибку 151234, ошибку 151610 и ошибку 194897.", "До Safari на iOS 14 событие не распространялось, поэтому document.addEventListener('visibilitychange', ...) работало, но window.addEventListener('visibilitychange', ...) — нет.", "Свойство обработчика событий onvisibilitychange не поддерживается."]
8.0
2.0Свойство обработчика событий onvisibilitychange не поддерживается.
1.0Свойство обработчика событий onvisibilitychange не поддерживается.
62
4.4.3Свойство обработчика событий onvisibilitychange не поддерживается.
≤37Свойство обработчика событий onvisibilitychange не поддерживается.

См. также

  • Page Visibility API
  • Document.visibilityState
  • Document.hidden
  • Не теряйте состояние пользователя и приложения, используйте Page Visibility подробно объясняет, почему следует использовать visibilitychange, а не beforeunload/unload.
  • Page Lifecycle API предоставляет рекомендации по обработке поведения жизненного цикла страницы в ваших веб-приложениях.

© 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/Document/visibilitychange_event

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API