Документ: событие 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);
}
};
Спецификации
Совместимость с браузерами
| Десктопные | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
visibilitychange_event |
6233Свойство обработчика событийonvisibilitychange не поддерживается.13Свойство обработчика событийonvisibilitychange не поддерживается. |
1812Свойство обработчика событийonvisibilitychange не поддерживается. |
56 | 4920Свойство обработчика событийonvisibilitychange не поддерживается.15Свойство обработчика событийonvisibilitychange не поддерживается.12.1–15Свойство обработчика событийonvisibilitychange не поддерживается. |
14.114Событие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 не поддерживается."] |
6233Свойство обработчика событийonvisibilitychange не поддерживается.18Свойство обработчика событийonvisibilitychange не поддерживается. |
56 | 4620Свойство обработчика событийonvisibilitychange не поддерживается.14Свойство обработчика событийonvisibilitychange не поддерживается.12.1–14Свойство обработчика событийonvisibilitychange не поддерживается. |
14.514Событие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.02.0Свойство обработчика событийonvisibilitychange не поддерживается.1.0Свойство обработчика событийonvisibilitychange не поддерживается. |
624.4.3Свойство обработчика событийonvisibilitychange не поддерживается.≤37Свойство обработчика событийonvisibilitychange не поддерживается. |
См. также
- Page Visibility API
Document.visibilityStateDocument.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