Headroom.js предоставляет простой способ управления поведением шапки страницы при прокрутке, позволяя скрывать или показывать её с плавными анимациями. Одним из ключевых элементов этой функциональности являются transitions, которые обеспечивают визуальный комфорт и плавность при смене состояний элемента.
Для работы переходов необходимо определить CSS-классы, которые Headroom.js применяет в зависимости от состояния шапки:
.headroom--unpinned — шапка скрыта при прокрутке
вниз..headroom--pinned — шапка видна при прокрутке
вверх..headroom--top — шапка находится в начале
страницы..headroom--not-top — шапка находится не в начале
страницы..headroom--bottom — шапка достигла конца страницы..headroom--not-bottom — шапка не достигла конца
страницы.Для анимации изменения состояния важно добавить к этим классам
свойства transition:
.headroom {
position: fixed;
top: 0;
width: 100%;
transition: transform 0.3s ease-in-out, opacity 0.3s ease-in-out;
}
.headroom--unpinned {
transform: translateY(-100%);
opacity: 0;
}
.headroom--pinned {
transform: translateY(0);
opacity: 1;
}
Ключевой момент: без свойства
transition изменения состояния будут мгновенными, и
анимация исчезнет.
Headroom.js не ограничивает возможности CSS. Можно комбинировать
transform, opacity, height,
box-shadow и другие свойства для создания сложных
эффектов:
.headroom {
transition: transform 0.4s ease, box-shadow 0.4s ease;
}
.headroom--pinned {
transform: translateY(0);
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
}
.headroom--unpinned {
transform: translateY(-120%);
box-shadow: none;
}
Такое решение позволяет не только скрывать шапку, но и изменять её визуальный стиль, например, добавлять тень при закреплённом состоянии.
При инициализации Headroom.js можно задать опции, влияющие на скорость срабатывания состояния:
var header = document.querySelector("header");
var headroom = new Headroom(header, {
tolerance: {
up: 5, // минимальное количество пикселей для прокрутки вверх
down: 10 // минимальное количество пикселей для прокрутки вниз
},
offset: 100, // смещение, после которого шапка начнет реагировать
classes: {
pinned: "headroom--pinned",
unpinned: "headroom--unpinned",
top: "headroom--top",
notTop: "headroom--not-top",
bottom: "headroom--bottom",
notBottom: "headroom--not-bottom"
}
});
headroom.init();
tolerance определяет чувствительность к прокрутке,
влияя на момент срабатывания transition.offset задаёт порог, после которого начинается
анимация.Headroom.js генерирует события, которые позволяют динамически управлять CSS-свойствами и создавать сложные анимации:
header.addEventListener("headroom.pinned", function() {
header.style.backgroundColor = "rgba(255, 255, 255, 0.95)";
});
header.addEventListener("headroom.unpinned", function() {
header.style.backgroundColor = "transparent";
});
Важно: transitions в CSS гарантируют плавность, а события позволяют контролировать дополнительные параметры, такие как фон, тень или размеры.
transform: translateY() вместо top, так как
это GPU-ускоряемое свойство и не вызывает перерисовку макета.transition для всех свойств, которые
будут меняться динамически.@keyframes, но важно сохранить базовый
transition для быстрого отклика..headroom {
transition: transform 0.35s ease, opacity 0.35s ease, box-shadow 0.35s ease;
}
.headroom--unpinned {
transform: translateY(-120%);
opacity: 0;
box-shadow: none;
}
.headroom--pinned {
transform: translateY(0);
opacity: 1;
box-shadow: 0 4px 12px rgba(0,0,0,0.2);
}
Такое решение создаёт плавное скольжение шапки, одновременно изменяя её прозрачность и добавляя динамическую тень.
Использование transitions в Headroom.js позволяет создавать не только удобные интерфейсы, но и визуально привлекательные решения, которые легко адаптируются под различные типы сайтов и дизайнов.