Headroom.js — это лёгкая библиотека для управления поведением верхней панели (header) при скролле страницы. Динамическое создание экземпляров позволяет подключать и отключать анимацию скрытия/показа хедера в зависимости от состояния страницы или пользовательских действий.
Для создания экземпляра Headroom.js требуется элемент DOM, который будет управляться:
const header = document.querySelector('.header');
const headroom = new Headroom(header, {
tolerance: 5, // Минимальный сдвиг в пикселях, чтобы срабатывала анимация
offset: 100, // Сколько пикселей скролла необходимо пройти, чтобы активировалась реакция
classes: { // Классы, применяемые к элементу
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned",
top: "headroom--top",
notTop: "headroom--not-top"
}
});
headroom.init();
Ключевые моменты при создании экземпляров:
tolerance может быть числом или объектом с разными
значениями для направления вверх и вниз.offset задаёт минимальное смещение скролла перед
срабатыванием анимации.classes позволяют интегрировать Headroom.js с
существующими стилями CSS.После создания экземпляра возможно полное управление его поведением:
headroom.init()
запускает отслеживание скролла.headroom.destroy()
отключает наблюдение за скроллом и убирает все динамически добавленные
классы.headroom.pin() и headroom.unpin() позволяют
вручную закреплять или скрывать хедер без скролла.Пример динамического управления:
let dynamicHeader;
function createHeader() {
const header = document.querySelector('.header');
dynamicHeader = new Headroom(header);
dynamicHeader.init();
}
function removeHeader() {
if (dynamicHeader) {
dynamicHeader.destroy();
dynamicHeader = null;
}
}
Headroom.js поддерживает работу с несколькими элементами одновременно. Важно создавать отдельные экземпляры для каждого хедера:
const headers = document.querySelectorAll('.header');
const instances = [];
headers.forEach(header => {
const instance = new Headroom(header, { offset: 50 });
instance.init();
instances.push(instance);
});
// Позже можно отключить все экземпляры
instances.forEach(instance => instance.destroy());
Такой подход полезен для страниц с динамическим контентом, где несколько панелей появляются или исчезают в DOM.
Иногда требуется создавать экземпляр только после определённого действия пользователя:
document.querySelector('#loadHeaderButton').addEventListener('click', () => {
const header = document.querySelector('.dynamic-header');
const headroomInstance = new Headroom(header, { tolerance: 10 });
headroomInstance.init();
});
Метод destroy() не только отключает скролл-отслеживание,
но и возвращает элемент в исходное состояние:
headroom.destroy();
// Все классы headroom удалены с элемента
При удалении динамически созданных элементов важно всегда вызывать
destroy(), чтобы предотвратить утечки памяти и конфликт
событий скролла.
destroy() — обязательный инструмент при удалении
элементов или отключении анимации.Такой подход обеспечивает максимальную гибкость управления поведением хедера и интеграцию Headroom.js с современными динамическими интерфейсами.