Headroom.js — это легковесная библиотека JavaScript, предназначенная для создания интерактивной навигации, которая динамически скрывается или показывается при прокрутке страницы. Основная идея заключается в управлении видимостью верхнего меню в зависимости от направления скролла, что повышает удобство использования и экономит место на экране.
Библиотека работает с любым элементом DOM, который можно
позиционировать фиксированно или абсолютно. Основной принцип работы —
отслеживание положения страницы и применение CSS-классов для управления
состояниями: видимый (headroom--pinned) и скрытый
(headroom--unpinned).
var header = document.querySelector(".header");
var headroom = new Headroom(header);
headroom.init();
В этом примере элемент с классом .header становится
«умным» заголовком: он будет скрываться при прокрутке вниз и появляться
при прокрутке вверх.
Headroom.js предоставляет гибкие настройки для точной настройки поведения навигации. Основные параметры:
tolerance – определяет количество пикселей, которое пользователь должен проскроллить, чтобы триггерить изменение состояния.
tolerance: { up: 5, down: 10 }offset – смещение от верхней границы страницы, после которого библиотека начинает отслеживать прокрутку.
offset: 50classes – объект, в котором можно задать собственные классы для разных состояний:
classes: {
initial: "header--initialized",
pinned: "header--visible",
unpinned: "header--hidden"
}Параметры tolerance и offset позволяют настроить более мягкое или резкое поведение скрытия/показа шапки. Например, при больших сайтах с длинными страницами рекомендуется увеличить offset, чтобы шапка не реагировала на каждое движение.
Headroom.js можно использовать через CDN или установку через npm:
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
Для npm:
npm install headroom.js
Инициализация после подключения выглядит одинаково для всех вариантов:
var header = document.querySelector("header");
var headroom = new Headroom(header, {
tolerance: 5,
offset: 100,
classes: {
initial: "animated-header",
pinned: "slideDown",
unpinned: "slideUp"
}
});
headroom.init();
Здесь slideDown и slideUp — CSS-анимации,
которые плавно скрывают и показывают меню.
Для реализации компактной версии навигации используется комбинация Headroom.js и CSS-трансформаций. Основная цель — уменьшить высоту шапки при прокрутке и сделать интерфейс более минималистичным.
HTML-структура:
<header class="header">
<div class="logo">LOGO</div>
<nav class="nav">
<a href="#">Главная</a>
<a href="#">О нас</a>
<a href="#">Контакты</a>
</nav>
</header>
CSS-анимации для компактной шапки:
.header {
position: fixed;
top: 0;
width: 100%;
height: 80px;
background: #fff;
transition: all 0.3s ease;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
z-index: 1000;
}
.header--pinned {
height: 60px;
}
.header--unpinned {
transform: translateY(-100%);
}
При прокрутке вниз .header скрывается, а при прокрутке
вверх возвращается с уменьшенной высотой. Такой подход экономит
вертикальное пространство и делает интерфейс более удобным на мобильных
устройствах.
Headroom.js предоставляет набор событий для тонкой настройки поведения:
Пример использования событий:
headroom = new Headroom(header);
headroom.on("pin", function() {
console.log("Шапка закреплена");
});
headroom.on("unpin", function() {
console.log("Шапка скрыта");
});
headroom.init();
Это позволяет интегрировать дополнительные эффекты, такие как изменение цвета фона или прозрачности при прокрутке.
Для мобильных устройств рекомендуется уменьшить порог tolerance и offset, чтобы меню реагировало быстрее:
var headroomMobile = new Headroom(header, {
tolerance: { up: 3, down: 3 },
offset: 30,
classes: {
pinned: "mobile-visible",
unpinned: "mobile-hidden"
}
});
headroomMobile.init();
CSS для мобильной версии может включать уменьшение размеров логотипа и навигационных ссылок:
.header.mobile-visible {
height: 50px;
}
.header.mobile-hidden {
transform: translateY(-100%);
}
Такое сочетание обеспечивает компактную и удобную навигацию на всех экранах.
scroll-behavior: smooth; в CSS, чтобы скрытие шапки не
казалось резким.onPin и
onUnpin, создавая более выразительные интерфейсы.Компактная навигация на базе Headroom.js позволяет одновременно экономить место на экране, улучшать пользовательский опыт и создавать современные, адаптивные интерфейсы.