Headroom.js — легковесная JavaScript-библиотека для управления поведением шапки (header) при прокрутке страницы. Основная задача — скрывать элемент при прокрутке вниз и возвращать его при прокрутке вверх, тем самым экономя полезное пространство и улучшая пользовательский опыт.
Подход основан не на сложных анимациях, а на добавлении и удалении CSS-классов в зависимости от направления и состояния скролла. Это позволяет гибко настраивать внешний вид через стили, а не через JavaScript.
Headroom.js отслеживает положение прокрутки и сравнивает текущее значение с предыдущим. На основе этого определяется:
В зависимости от этих условий библиотека применяет CSS-классы:
Основная функциональность — реакция на направление прокрутки:
Это поведение помогает не загромождать интерфейс и одновременно сохранять быстрый доступ к навигации.
Параметр offset определяет, на каком расстоянии от
верхней точки начнётся активация поведения:
const headroom = new Headroom(element, {
offset: 100
});
До достижения 100px элемент остаётся в состоянии
headroom--top, после — переключается.
Параметр tolerance задаёт минимальное расстояние
прокрутки, необходимое для изменения состояния:
const headroom = new Headroom(element, {
tolerance: {
up: 5,
down: 10
}
});
Позволяет:
Headroom.js предоставляет callbacks для ключевых состояний:
const headroom = new Headroom(element, {
onPin: function() {},
onUnpin: function() {},
onTop: function() {},
onNotTop: function() {}
});
Это позволяет:
Библиотека не управляет стилями напрямую — только добавляет классы. Это даёт максимальную гибкость:
.headroom {
transition: transform 0.3s ease;
}
.headroom--unpinned {
transform: translateY(-100%);
}
.headroom--pinned {
transform: translateY(0);
}
Такой подход позволяет:
Headroom.js занимает всего несколько килобайт. Это важно для:
Библиотека не требует сторонних инструментов (например, jQuery), что:
Headroom.js оптимизирован для работы со скроллом:
requestAnimationFrameЭто особенно важно при:
Минимальный пример подключения:
const element = document.querySelector("header");
const headroom = new Headroom(element);
headroom.init();
Не требуется сложной настройки или архитектурных изменений.
Headroom.js подходит не только для шапок. Возможны сценарии:
Основное преимущество — улучшение пользовательского опыта:
Особенно эффективно на мобильных устройствах, где пространство ограничено.
Можно переопределить стандартные классы:
const headroom = new Headroom(element, {
classes: {
pinned: "is-visible",
unpinned: "is-hidden"
}
});
Это удобно при интеграции с существующими стилями.
Headroom может работать не только с window, но и с
конкретным контейнером:
const scroller = document.querySelector(".scroll-container");
const headroom = new Headroom(element, {
scroller: scroller
});
Применяется в:
Управление состоянием:
headroom.destroy(); // отключение
headroom.init(); // повторная инициализация
Позволяет:
Классический случай — верхнее меню сайта:
В админках и дашбордах:
На мобильных устройствах:
Headroom.js решает обе задачи.
Используется для:
Элемент должен иметь:
position: fixed;
top: 0;
Иначе эффект скрытия не будет корректным.
Библиотека не работает без scroll-событий:
Headroom.js:
Всё оформление полностью на стороне CSS.
Можно реализовать аналог вручную, но:
Headroom.js решает эти задачи «из коробки».
Некоторые эффекты можно реализовать через CSS (например,
position: sticky), однако:
Headroom.js объединяет:
Библиотека остаётся эффективным инструментом для создания современных интерфейсов с адаптивным поведением элементов при прокрутке.