Headroom.js — это библиотека для управления поведением шапки страницы при скролле. Основной функционал библиотеки заключается в автоматическом скрытии и показе шапки в зависимости от направления прокрутки, а также предоставлении информации о состоянии элемента через события и коллбэки.
Для корректного использования коллбэков необходимо понимать, какие состояния Headroom.js отслеживает и как их можно использовать для динамического изменения интерфейса.
Headroom.js выделяет четыре ключевых состояния:
initial – начальное состояние элемента
при загрузке страницы.pinned – элемент закреплён, обычно
отображается в верхней части страницы после прокрутки вверх.unpinned – элемент убран, обычно скрыт
при прокрутке вниз.top /
notTop – элемент находится в верхней части
страницы (top) или пользователь прокрутил ниже верхней
границы (notTop).bottom /
notBottom – элемент достиг нижней границы
документа (bottom) или находится выше нижней границы
(notBottom).Каждое состояние формирует основу для логики в коллбэках, позволяя изменять классы, анимации и поведение шапки.
Для получения состояния элемента используется объект конфигурации при инициализации Headroom.js. Основные методы для отслеживания:
const header = document.querySelector("header");
const headroom = new Headroom(header, {
tolerance: {
up: 5,
down: 10
},
offset: 50,
classes: {
initial: "headroom--initial",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned",
top: "headroom--top",
notTop: "headroom--not-top",
bottom: "headroom--bottom",
notBottom: "headroom--not-bottom"
},
onPin: () => console.log("Состояние: pinned"),
onUnpin: () => console.log("Состояние: unpinned"),
onTop: () => console.log("Состояние: top"),
onNotTop: () => console.log("Состояние: notTop"),
onBottom: () => console.log("Состояние: bottom"),
onNotBottom: () => console.log("Состояние: notBottom")
});
headroom.init();
Пояснения по коллбэкам:
onPin и onUnpin –
вызываются при изменении видимости шапки. Эти события позволяют
запускать анимации, менять стили или обновлять состояние
интерфейса.onTop и onNotTop –
фиксируют положение относительно верхней границы страницы. Полезно для
добавления или удаления теней, изменения цвета фона шапки.onBottom и onNotBottom –
отслеживают нижнюю границу документа. Используются для изменения
поведения в футере или динамической подгрузки контента.В некоторых случаях требуется программно узнать состояние элемента
без ожидания коллбэка. Headroom.js предоставляет свойство
headroom.elem и методы класса Headroom:
console.log(headroom.elem.classList.contains("headroom--pinned")); // true или false
console.log(headroom.elem.classList.contains("headroom--unpinned")); // true или false
Это позволяет реализовать условную логику:
if (headroom.elem.classList.contains("headroom--pinned")) {
console.log("Шапка видна");
} else if (headroom.elem.classList.contains("headroom--unpinned")) {
console.log("Шапка скрыта");
}
Использование классов состояния внутри коллбэков позволяет создавать плавные интерфейсные решения. Пример:
headroom.init();
header.addEventListener("transitionend", () => {
if (header.classList.contains("headroom--unpinned")) {
header.style.backgroundColor = "transparent";
} else if (header.classList.contains("headroom--pinned")) {
header.style.backgroundColor = "#333";
}
});
Здесь динамически меняется фон шапки в зависимости от её состояния, обеспечивая визуальное сопровождение скролла.
Иногда необходимо учитывать сразу несколько состояний:
if (header.classList.contains("headroom--pinned") &&
header.classList.contains("headroom--notTop")) {
console.log("Шапка видна и пользователь прокрутил вниз");
}
Это полезно для реализации адаптивных интерфейсов, где поведение шапки зависит не только от направления скролла, но и от позиции на странице.
tolerance и offset для
уменьшения частоты вызовов коллбэков при небольших колебаниях
скролла.Headroom.js предоставляет гибкий механизм получения и использования состояния шапки через коллбэки и классы. Понимание всех состояний и их взаимодействия позволяет создавать сложные, отзывчивые интерфейсы без лишних вычислений и конфликтов стилей.