В мире веб-разработки взаимодействие с окном браузера — это неотъемлемая часть создания интерактивного пользовательского интерфейса. Объект window в JavaScript позволяет отслеживать различные события, такие как изменение размера, потеря фокуса, выход со страницы и многое другое. Эта статья поможет вам разобраться в самых полезных событиях окна и научит использовать их на практике.
Что такое window и зачем он нужен?
Объект window — это глобальный объект, доступный в любом скрипте, который запускается в браузере. Он представляет собой само окно браузера и предоставляет доступ ко множеству методов, свойств и событий, с помощью которых вы можете контролировать поведение страницы и реагировать на действия пользователя.
Чем отличается window от document и screen?
Объект | Назначение |
window | Представляет окно браузера. Управляет размерами, положением, вкладками. |
document | Отвечает за содержимое HTML-документа. Позволяет изменять DOM. |
screen | Предоставляет информацию об экране устройства — его ширина, высота и т.д. |
Основные события window и как с ними работать
Ниже рассмотрим наиболее важные события и реальные ситуации, где они действительно полезны.
load: полная загрузка страницы
Событие load срабатывает, когда HTML-документ, стили, изображения и другие ресурсы полностью загружены и готовы к работе.
window.addEventListener('load', () => {
console.log('Страница полностью загружена');
});
Когда использовать: если вам нужно убедиться, что все изображения, стили и скрипты загружены, прежде чем запускать сложную логику, например слайдеры, галереи, анимации или сторонние библиотеки.
resize: изменение размеров окна
Очень полезное событие для адаптивного дизайна. Позволяет отследить, когда пользователь изменяет размеры окна.
window.addEventListener('resize', () => {
const w = window.innerWidth;
const h = window.innerHeight;
document.body.style.backgroundColor = w < 600 ? '#ffdede' : '#defff0';
});
Когда использовать: если вам необходимо динамически измененить интерфейс, перестроить сетку, управлять элементами, делать расчеты на основании показателей ширины/высоты окна.
scroll: отслеживание прокрутки
Позволяет отследить, насколько пользователь проскроллил страницу. Часто используется для анимаций или ленивой загрузки.
window.addEventListener('scroll', () => {
const progress = window.scrollY / (document.body.scrollHeight - window.innerHeight);
console.log(`Прокрутка: ${Math.round(progress * 100)}%`);
});
Когда использовать: параллакс-эффекты, отображение кнопки "вверх", подгрузка данных.
beforeunload: предупреждение перед уходом
Срабатывает, когда пользователь пытается закрыть вкладку или перезагрузить страницу.
window.addEventListener('beforeunload', (e) => {
e.preventDefault();
e.returnValue = '';
// при закрытии страницы появится предупреждающее окно
});
Когда использовать: защита форм от случайного закрытия, напоминание о несохранённой информации, дополнительная задержка пользователя на странице.
unload: страница покидается
Это событие наступает в момент, когда пользователь закрывает вкладку страницы, обновляет ее или переходит по другой ссылке. Используется для последней отправки данных или очистки.
window.addEventListener('unload', () => {
navigator.sendBeacon('/log', JSON.stringify({ action: 'user_left' }));
// на сервер безопасно отправляются данные в фоновом режиме
});
Когда использовать: отправка статистики, закрытие соединений, сохранение сессии.
online и offline: отслеживание статуса сети
Помогают адаптировать поведение приложения, если пользователь теряет или восстанавливает интернет-соединение.
window.addEventListener('online', () => {
alert('Соединение восстановлено!');
});
window.addEventListener('offline', () => {
alert('Вы отключены от сети. Работа в оффлайн-режиме.');
});
Когда использовать: синхронизация данных, уведомления, ограничение функций без интернета.
focus и blur: активность окна
focus срабатывает, когда пользователь возвращается на вкладку, а blur — когда уходит с неё.
window.addEventListener('blur', () => {
document.title = 'Вы ушли со страницы...';
});
window.addEventListener('focus', () => {
document.title = '👋 Добро пожаловать обратно!';
});
Когда использовать: приостановка анимаций, пауза видео, изменение заголовков вкладки.
message: обмен сообщениями между окнами
Используется для безопасной передачи данных между окнами (например, если у вас есть всплывающее окно или iframe).
window.addEventListener('message', (event) => {
if (event.data.type === 'show-alert') {
alert(event.data.message);
}
});
Когда использовать: коммуникация между iframe и родителем, мультивкладочные приложения.
Заключение
События window — это ключ к созданию реактивного интерфейса. От обработки загрузки и изменения размеров до управления соединением и вкладками — всё это улучшает взаимодействие с пользователем.
Краткий чеклист для использования:
- Загрузи данные после полной загрузки — DOMContentLoaded или load
- Подстрой интерфейс под размеры экрана — resize
- Сделай прокрутку полезной — scroll
- Защити формы — beforeunload
- Отправь логи перед выходом — unload
- Поддержи оффлайн-режим — offline/online
- Учитывай фокус — focus/blur
- Обменивайся данными между окнами — message
Комментарии (0)