Headroom.js — это легковесная библиотека для управления видимостью элементов при скролле страницы. Один из наиболее мощных аспектов Headroom.js — возможность динамического изменения конфигурации после инициализации, что позволяет гибко адаптировать поведение заголовков или других элементов в зависимости от условий страницы, устройства пользователя или действий на сайте.
Базовая инициализация выглядит следующим образом:
const header = document.querySelector('header');
const headroom = new Headroom(header, {
tolerance: 5,
offset: 100,
classes: {
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned"
}
});
headroom.init();
Здесь tolerance, offset и
classes определяют поведение и визуальное состояние
элемента при прокрутке. Все эти параметры могут быть изменены в
любой момент времени после инициализации.
tolerance и offsetTolerance определяет минимальное количество пикселей, на которое должен прокрутиться документ, чтобы произошло переключение состояния элемента. Offset задает смещение от верхней границы, после которого Headroom начинает отслеживать скролл.
Изменение этих параметров осуществляется напрямую через свойства объекта Headroom:
// Увеличение чувствительности
headroom.tolerance = 10;
// Сдвиг триггера вниз
headroom.offset = 200;
После изменения этих параметров поведение скролла обновляется автоматически при следующем движении страницы. Это позволяет адаптировать динамику заголовка под различные сценарии, например, при переключении между мобильной и десктопной версией сайта.
Свойство classes задает, какие классы будут добавляться
элементу при изменении его состояния (initial,
pinned, unpinned, top,
notTop, bottom, notBottom). Эти
классы можно менять в реальном времени:
headroom.classes = {
initial: "header-init",
pinned: "header-visible",
unpinned: "header-hidden"
};
Изменение классов позволяет изменять анимацию, цвет, размеры или другие CSS-параметры без необходимости перезапуска скрипта. Это особенно полезно при смене темы сайта или адаптивной подстройке интерфейса.
pin() и unpin() с учётом новой
конфигурацииHeadroom.js предоставляет методы pin() и
unpin(), которые можно вызывать вручную, учитывая текущую
конфигурацию:
// Принудительное закрепление заголовка
headroom.pin();
// Скрытие заголовка
headroom.unpin();
Эти методы сразу применяют текущее состояние конфигурации, включая
новые tolerance, offset и
classes. Это позволяет программно управлять поведением
элемента на основе логики приложения, например при открытии модальных
окон или переключении между секциями страницы.
destroy() и повторную инициализациюВ некоторых случаях требуется полная замена конфигурации. Для этого
используется метод destroy() с последующей повторной
инициализацией:
headroom.destroy();
const newConfig = new Headroom(header, {
tolerance: 20,
offset: 50,
classes: {
initial: "headroom-new",
pinned: "headroom-new--pinned",
unpinned: "headroom-new--unpinned"
}
});
newConfig.init();
Такой подход обеспечивает чистую замену всех параметров без конфликтов с предыдущей конфигурацией.
Headroom.js поддерживает события pin,
unpin, top, notTop,
bottom, notBottom, на которые можно
подписываться и менять конфигурацию в процессе работы:
header.addEventListener("pin", () => {
headroom.offset = 150;
});
header.addEventListener("unpin", () => {
headroom.tolerance = 8;
});
Использование событий позволяет динамически подстраивать чувствительность и визуальное поведение заголовка в зависимости от действий пользователя или состояния страницы.
В сложных интерфейсах часто применяется комбинация всех перечисленных подходов:
tolerance и offset при смене
размеров экрана.pin() и unpin() при
открытии/закрытии модальных окон.destroy() при смене темы
или полной перестройке DOM.Это позволяет создавать адаптивные, динамические заголовки, которые подстраиваются под любые сценарии использования, обеспечивая одновременно высокую производительность и удобство для пользователя.