Headroom.js — это библиотека на JavaScript, предназначенная для управления видимостью верхней панели навигации при скролле страницы. Она позволяет реализовать поведение «скрыть-показать», когда шапка страницы автоматически исчезает при прокрутке вниз и появляется при прокрутке вверх, улучшая пользовательский опыт и экономя пространство на экране.
Ключевой механизм работы основан на отслеживании направления прокрутки и изменении классов элемента DOM в зависимости от этого направления. Headroom.js не управляет стилями напрямую, он лишь добавляет или убирает CSS-классы, что обеспечивает гибкость в стилизации.
Для начала необходимо подключить скрипт библиотеки. Она может быть установлена через npm или подключена через CDN:
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
После подключения создается экземпляр Headroom:
var header = document.querySelector("header");
var headroom = new Headroom(header, {
tolerance: 5,
offset: 50,
classes: {
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned",
top: "headroom--top",
notTop: "headroom--not-top"
}
});
headroom.init();
Параметры конфигурации:
tolerance — число пикселей, на которое пользователь
должен прокрутить страницу, прежде чем шапка изменит состояние.
Позволяет избежать лишних срабатываний при мелких прокрутках.offset — вертикальное смещение от верхней границы
страницы, после которого начинается отслеживание прокрутки.classes — объект, содержащий классы CSS для различных
состояний шапки: initial, pinned,
unpinned, top, notTop.Headroom.js использует пять ключевых классов, которые позволяют управлять отображением шапки:
Эти классы можно использовать в CSS для анимаций и переходов:
.headroom {
transition: transform 0.3s ease-in-out;
will-change: transform;
}
.headroom--unpinned {
transform: translateY(-100%);
}
.headroom--pinned {
transform: translateY(0%);
}
Skip links — это ссылки, которые позволяют пользователю быстро перейти к основному контенту страницы, минуя навигацию. Они критически важны для доступности (accessibility) и обычно размещаются в начале документа.
При использовании Headroom.js важно учитывать, что шапка может скрываться, и skip links должны оставаться корректно доступными. Для этого рекомендуется:
header в
HTML..skip-link {
position: absolute;
top: -40px;
left: 0;
background: #000;
color: #fff;
padding: 8px 16px;
z-index: 1000;
transition: top 0.3s;
}
.skip-link:focus {
top: 0;
}
headroom--unpinned, чтобы
элемент не перекрывал skip links, когда шапка скрыта.Headroom.js предоставляет возможность подписываться на события:
onPin — вызывается, когда шапка становится
видимой.onUnpin — вызывается, когда шапка скрывается.onTop — страница находится в верхней точке.onNotTop — страница прокручена вниз.Пример использования событий:
headroom = new Headroom(header);
headroom.init();
header.addEventListener("headroom.pin", function() {
console.log("Шапка показана");
});
header.addEventListener("headroom.unpin", function() {
console.log("Шапка скрыта");
});
Эти события позволяют реализовать динамическое поведение страницы, например, менять цвет шапки при прокрутке или отключать определенные анимации для мобильных устройств.
При адаптивном дизайне необходимо учитывать:
Пример условного отключения на мобильных устройствах:
if(window.innerWidth > 768) {
headroom.init();
}
tolerance и offset в
зависимости от высоты шапки и длины контента страницы.Headroom.js позволяет создавать интерфейсы, которые одновременно динамичны, удобны и доступны, обеспечивая оптимальное сочетание функциональности шапки и возможностей skip links.