Headroom.js — это легковесная JavaScript-библиотека для управления поведением шапки сайта при прокрутке страницы. Основная идея заключается в том, чтобы динамически скрывать шапку при скролле вниз и показывать её при скролле вверх, улучшая юзабилити и экономя экранное пространство.
Для использования Headroom.js достаточно подключить скрипт и
CSS-анимацию (если требуется). Поддерживаются как классический
<script>, так и установка через npm:
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
Или через npm:
npm install headroom.js
Для начала работы с Headroom необходимо выбрать элемент, который
будет управляться библиотекой, чаще всего это
<header>:
var myHeader = document.querySelector("header");
var headroom = new Headroom(myHeader);
headroom.init();
Ключевой момент: по умолчанию Headroom использует
CSS-классы .headroom--pinned и
.headroom--unpinned для управления видимостью элемента. Эти
классы можно переопределить через параметры.
Headroom.js предоставляет несколько важных опций для настройки:
up и
down.tolerance: { up: 5, down: 10 }
offset: 100
classes: {
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned",
top: "headroom--top",
notTop: "headroom--not-top",
bottom: "headroom--bottom",
notBottom: "headroom--not-bottom"
}
var headroom = new Headroom(myHeader, {
onUnpin: function() { console.log("Шапка скрыта"); },
onPin: function() { console.log("Шапка показана"); }
});
headroom.init();
Headroom.js не накладывает жестких ограничений на анимацию, но для плавного эффекта обычно используют CSS-переходы:
.headroom {
transition: transform 0.3s ease-in-out;
}
.headroom--unpinned {
transform: translateY(-100%);
}
.headroom--pinned {
transform: translateY(0%);
}
Этот подход позволяет шапке выезжать и скрываться без резких скачков.
.headroom--top..headroom--bottom, полезно для футеров и
sticky-элементов.var header = document.querySelector("header");
var headroom = new Headroom(header, {
tolerance: { up: 10, down: 20 },
offset: 50,
classes: {
initial: "headroom",
pinned: "headroom--visible",
unpinned: "headroom--hidden",
top: "headroom--top",
notTop: "headroom--scrolled"
},
onPin: function() { header.style.backgroundColor = "#fff"; },
onUnpin: function() { header.style.backgroundColor = "transparent"; }
});
headroom.init();
В этом примере шапка меняет фон при скрытии/показе и использует кастомные CSS-классы для анимации.
requestAnimationFrame для тяжелых
колбэков, чтобы не тормозить скролл.offset, чтобы избежать
постоянного мелькания.При использовании в одностраничных приложениях (Vue, React, Angular) Headroom инициализируется после рендера DOM:
mounted() {
const header = this.$refs.header;
const headroom = new Headroom(header);
headroom.init();
}
Важно повторно пересоздавать экземпляр при динамическом изменении DOM, чтобы шапка корректно реагировала на скролл.
Headroom.js предоставляет мощный, но при этом лёгкий механизм управления видимостью шапки. Благодаря гибкой конфигурации, CSS-анимациям и колбэкам его можно адаптировать под широкий спектр интерфейсов: от минималистичных лендингов до сложных SPA с динамическим контентом.