Headroom.js изначально создавался для управления видимостью верхней панели при вертикальной прокрутке страницы, но его возможности можно адаптировать и для горизонтального скролла, особенно когда требуется динамическая навигация на широких страницах или одностраничных веб-приложениях. Основной принцип работы Headroom.js заключается в отслеживании направления прокрутки и применении CSS-классов для управления видимостью элемента.
Обычная инициализация Headroom.js для вертикальной прокрутки выглядит так:
var header = document.querySelector("header");
var headroom = new Headroom(header);
headroom.init();
Для горизонтального скролла ключевым моментом является
изменение метода, который Headroom использует для отслеживания
прокрутки. В стандартной конфигурации Headroom.js проверяет
window.scrollY или
document.documentElement.scrollTop. Для горизонтальной
прокрутки нужно использовать window.scrollX:
var header = document.querySelector("header");
var headroom = new Headroom(header, {
tolerance: {
up: 5,
down: 5
},
offset: 50,
scroller: window,
onUnpin: function() {
header.classList.add('hidden');
},
onPin: function() {
header.classList.remove('hidden');
}
});
// Переопределение функции getScrollY для горизонтальной прокрутки
headroom.getScrollY = function() {
return window.scrollX;
};
headroom.init();
В этом примере tolerance определяет порог в пикселях,
при котором будет срабатывать скрытие или появление панели, а
offset задает минимальное смещение перед началом реакции.
Метод getScrollY переопределяется для возврата
горизонтального значения прокрутки, что превращает Headroom в инструмент
для управления навигацией по оси X.
Ключевым моментом является корректная анимация скрытия и появления
навигации. Для горизонтального скролла можно применять свойства
transform: translateX вместо стандартного
translateY:
header {
position: fixed;
top: 0;
left: 0;
height: 60px;
width: 100%;
background-color: #333;
color: white;
transition: transform 0.3s ease-in-out;
}
header.headroom--unpinned {
transform: translateX(-100%);
}
header.headroom--pinned {
transform: translateX(0);
}
При таком подходе панель плавно уходит влево при прокрутке вправо и возвращается обратно при движении скролла влево.
1. Динамическая скорость скрытия: Можно изменять скорость скрытия в зависимости от величины прокрутки:
headroom.onUn pin = function() {
var speed = Math.min(window.scrollX / 50, 1);
header.style.transitionDuration = (0.3 * speed) + 's';
header.classList.add('hidden');
};
2. Адаптивное поведение для разных устройств: На мобильных устройствах горизонтальный скролл встречается реже, поэтому можно включать Headroom только на десктопной версии:
if (window.innerWidth > 1024) {
headroom.init();
}
3. Интеграция с горизонтальными каруселями: Headroom можно использовать совместно с горизонтальными слайдерами и галереями, чтобы панель навигации скрывалась при пролистывании контента:
var slider = document.querySelector('.carousel');
slider.addEventListener('scroll', function() {
headroom.update();
});
Headroom.js поддерживает следующие события: onPin,
onUnpin, onTop, onNotTop. Для
горизонтальной прокрутки их поведение можно адаптировать через
переопределение метода getScrollY или
getScrollDirection.
headroom.getScrollDirection = function() {
var currentX = window.scrollX;
var direction = currentX > this.lastScroll ? "down" : "up";
this.lastScroll = currentX;
return direction;
};
Эта настройка позволяет применять различные CSS-классы в зависимости от направления горизонтального скролла и создавать более интерактивную навигацию.
headroom.update()
при горизонтальном скролле через
requestAnimationFrame.transform: translateX вместо left или
margin.querySelector при каждом событии скролла.Headroom.js в горизонтальном режиме открывает новые возможности для динамичной навигации на широких интерфейсах. Сочетание переопределения методов скролла, CSS-анимаций и событий позволяет строить гибкие и отзывчивые интерфейсы с горизонтальным скроллом, сохраняя плавность работы и высокую производительность.