Headroom.js — это лёгкая библиотека для управления видимостью верхней панели при скролле страницы. Одним из ключевых аспектов её работы является система классов, которые применяются к DOM-элементу, к которому подключается Headroom. Понимание этих классов позволяет точно управлять анимацией и стилями панели, не вмешиваясь в саму библиотеку.
Headroom.js использует несколько предопределённых CSS-классов, автоматически добавляемых и убираемых в зависимости от состояния скролла.
headroom
.headroom {
transition: transform 0.25s ease-in-out;
position: fixed;
width: 100%;
top: 0;
z-index: 1000;
}headroom--pinned
.headroom--pinned {
transform: translateY(0%);
}headroom--unpinned
transform: translateY(-100%)..headroom--unpinned {
transform: translateY(-100%);
}headroom--top
.headroom--top {
box-shadow: none;
}headroom--not-top
.headroom--not-top {
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}headroom--bottom и
headroom--not-bottom
headroom--bottom применяется, когда скролл достиг
нижней границы документа.headroom--not-bottom снимается при уходе от нижней
границы.Все перечисленные классы могут сочетаться между собой. Например,
элемент может одновременно иметь
headroom headroom--pinned headroom--not-top, что
сигнализирует о закреплённой панели, которая не находится в верхней
точке.
С помощью этих классов легко реализовать комплексные визуальные эффекты без вмешательства в JavaScript-код.
Headroom.js позволяет изменять названия классов при инициализации
через объект options. Это удобно для интеграции с
существующими стилями проекта:
var myElement = document.querySelector("#header");
var headroom = new Headroom(myElement, {
classes: {
initial: "header-initial",
pinned: "header-visible",
unpinned: "header-hidden",
top: "header-top",
notTop: "header-scrolled",
bottom: "header-bottom",
notBottom: "header-not-bottom"
}
});
headroom.init();
initial — класс при
инициализации.pinned / unpinned —
контролируют видимость при скролле.top / notTop — состояние
верхней границы страницы.bottom / notBottom —
состояние нижней границы страницы.Такой подход обеспечивает гибкость и интеграцию с любой CSS-архитектурой, будь то BEM, SMACSS или Tailwind.
transform: translateY вместо
top для плавной анимации, поскольку transform
аппаратно ускоряется в современных браузерах..headroom {
transition: transform 0.3s ease, background-color 0.3s ease, box-shadow 0.3s ease;
}
.headroom--unpinned {
transform: translateY(-100%);
}
.headroom--pinned {
transform: translateY(0%);
}
Эта структура классов по умолчанию обеспечивает мощный и гибкий инструмент для управления поведением верхних панелей в зависимости от прокрутки страницы.