Headroom.js — это лёгкая JavaScript-библиотека, предназначенная для создания «скрывающихся» шапок на веб-странице. Она позволяет динамически скрывать или показывать заголовок при прокрутке страницы, улучшая восприятие контента и экономя место на экране. Основная идея заключается в отслеживании направления прокрутки: при движении вниз шапка скрывается, при движении вверх — появляется снова.
Для начала необходимо подключить библиотеку. Существует несколько способов:
Через CDN:
Через npm:
npm install headroom.js
После подключения Headroom.js необходимо выбрать элемент DOM, который
будет управляться. Обычно это или любой блок
с фиксированным положением.
const header = document.querySelector("header");
const headroom = new Headroom(header);
headroom.init();
Headroom.js предоставляет гибкие настройки через объект конфигурации, передаваемый при создании экземпляра:
const headroom = new Headroom(header, {
tolerance: {
up: 5,
down: 10
},
offset: 50,
classes: {
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned",
top: "headroom--top",
notTop: "headroom--not-top",
bottom: "headroom--bottom",
notBottom: "headroom--not-bottom",
frozen: "headroom--frozen"
}
});
headroom.init();
Ключевые параметры:
tolerance — число или объект, определяющее количество
пикселей, которое необходимо прокрутить, чтобы сработало событие
скрытия/появления.offset — количество пикселей от верхнего края страницы,
после которого начинается скрытие шапки.classes — объект, где можно указать CSS-классы для
различных состояний шапки.Headroom.js управляет классами, которые отражают текущее состояние шапки. Важнейшие из них:
headroom--pinned — шапка закреплена и
видима.headroom--unpinned — шапка скрыта при
прокрутке вниз.headroom--top — страница находится в
начале.headroom--not-top — страница
прокручена вниз.На основе этих классов можно создавать плавные анимации с помощью CSS:
.headroom {
transition: transform 0.3s ease-in-out;
}
.headroom--unpinned {
transform: translateY(-100%);
}
.headroom--pinned {
transform: translateY(0%);
}
Headroom.js предоставляет несколько методов для управления шапкой динамически:
headroom.init() — инициализация
скрипта.headroom.destroy() — отключение
библиотеки и удаление всех классов.headroom.unpin() — скрытие шапки
вручную.headroom.pin() — закрепление шапки
вручную.headroom.freeze() — замораживание
текущего состояния.headroom.unfreeze() — снятие
заморозки.Также доступны события через стандартные DOM-события или кастомные колбэки:
headroom.on('pin', () => console.log('Шапка закреплена'));
headroom.on('unpin', () => console.log('Шапка скрыта'));
1. Адаптация под мобильные устройства: На маленьких
экранах можно увеличивать чувствительность tolerance, чтобы
избежать лишнего мерцания шапки при небольших колебаниях прокрутки.
2. Использование с другими библиотеками: Headroom.js
легко интегрируется с анимационными библиотеками вроде GSAP для плавных
эффектов, либо с фреймворками вроде React и Vue. В React, например,
элемент можно обернуть в компонент и инициализировать Headroom внутри
useEffect.
3. Динамическая смена класса в зависимости от
прокрутки: Можно использовать метод on('unpin')
для изменения стиля шапки, когда она скрывается:
headroom.on('unpin', () => {
header.style.backgroundColor = "rgba(0,0,0,0.8)";
});
Классическая фиксированная шапка:
Инициализация с offset и кастомными классами:
const header = document.querySelector(".headroom");
const headroom = new Headroom(header, {
offset: 100,
classes: {
pinned: "slide-down",
unpinned: "slide-up",
initial: "headroom"
}
});
headroom.init();
CSS-анимации:
.slide-up {
transform: translateY(-100%);
transition: transform 0.25s ease-in;
}
.slide-down {
transform: translateY(0%);
transition: transform 0.25s ease-out;
}
Эта комбинация позволяет создать визуально плавную шапку, которая скрывается при прокрутке вниз и появляется при движении вверх, сохраняя пространство для основного контента.