Headroom.js — это легковесная библиотека для управления поведением шапки (header) при скролле страницы. Она обеспечивает динамическое скрытие и отображение элемента в зависимости от направления прокрутки. Основной механизм взаимодействия с библиотекой построен на коллбэк-функциях, которые позволяют отслеживать и реагировать на различные события.
Для начала необходимо создать экземпляр Headroom, передав в него DOM-элемент, который будет управляться:
const header = document.querySelector('header');
const headroom = new Headroom(header);
headroom.init();
Параметры по умолчанию обеспечивают базовую функциональность, но наиболее гибкое управление достигается через использование коллбэков.
Headroom.js предоставляет четыре ключевых события, для которых можно определить коллбэк-функции:
Пример задания коллбэков:
const headroom = new Headroom(header, {
onPin: () => {
console.log('Шапка отображается');
},
onUnpin: () => {
console.log('Шапка скрывается');
},
onTop: () => {
console.log('Достигнут верх страницы');
},
onNotTop: () => {
console.log('Прокрутка ушла вниз');
}
});
headroom.init();
Коллбэки тесно связаны с основными настройками Headroom:
onPin и onUnpin.
Может быть числом (px) или объектом
{ up: X, down: Y }.onTop и
onNotTop реагируют на эту настройку.Пример:
const headroom = new Headroom(header, {
tolerance: { up: 10, down: 20 },
offset: 50,
onPin: () => header.classList.add('pinned'),
onUnpin: () => header.classList.remove('pinned')
});
headroom.init();
В данном примере коллбэки обеспечивают синхронизацию CSS-анимаций с поведением шапки.
Коллбэк-функции можно использовать для реализации цепочек действий или асинхронных операций. Так как они вызываются автоматически библиотекой при определённых условиях, важно, чтобы структура была понятной и отделённой от основной логики приложения.
const headroom = new Headroom(header, {
onPin: () => {
header.classList.add('pinned');
fetch('/api/log-scroll')
.then(response => response.json())
.then(data => console.log('Данные логирования:', data));
},
onUnpin: () => {
header.classList.remove('pinned');
setTimeout(() => {
console.log('Шапка скрыта, можно запускать дополнительные анимации');
}, 300);
}
});
headroom.init();
Такая структура позволяет комбинировать синхронные и асинхронные действия, сохраняя чистоту кода и управляемость поведения шапки.
Хотя коллбэки автоматически вызываются библиотекой, иногда необходимо вызвать их вручную для тестирования или управления UI:
headroom.options.onPin();
headroom.options.onUnpin();
Это полезно при разработке сложных интерфейсов, когда поведение шапки зависит не только от скролла, но и от других событий на странице, таких как открытие модальных окон или переключение вкладок.
async/await.Пример с выделением функций:
function pinHeader() {
header.classList.add('pinned');
animateHeaderIn();
}
function unpinHeader() {
header.classList.remove('pinned');
animateHeaderOut();
}
const headroom = new Headroom(header, {
onPin: pinHeader,
onUnpin: unpinHeader
});
headroom.init();
Такой подход делает код модульным, упрощает тестирование и повторное использование коллбэков в других проектах.