Headroom.js — это лёгкая библиотека для управления видимостью элементов интерфейса при прокрутке страницы. Основное её применение — динамическое скрытие и отображение элементов, чаще всего шапки сайта (header). Однако возможности библиотеки распространяются и на футеры, обеспечивая более гибкое управление нижними панелями страницы.
Для работы с Headroom.js необходимо подключить сам скрипт и при желании CSS-анимации. Стандартный способ подключения через CDN выглядит следующим образом:
<!-- CSS для плавных переходов -->
<link rel="stylesheet" href="https://unpkg.com/headroom.js@0.12.0/dist/headroom.css">
<!-- Библиотека Headroom.js -->
<script src="https://unpkg.com/headroom.js@0.12.0/dist/headroom.min.js"></script>
Футер также должен иметь идентификатор или класс, чтобы библиотека могла привязаться к нужному элементу:
<footer id="site-footer">
<p>© 2026 Пример компании</p>
</footer>
В отличие от работы с шапкой, футер обычно располагается внизу страницы и должен скрываться при прокрутке вверх, чтобы не перекрывать контент, и появляться при прокрутке вниз. Для этого создаётся объект Headroom, привязанный к футеру:
const footer = document.getElementById('site-footer');
const headroomFooter = new Headroom(footer, {
tolerance: {
up: 5,
down: 5
},
offset: 50,
classes: {
initial: 'headroom',
pinned: 'headroom--pinned',
unpinned: 'headroom--unpinned',
top: 'headroom--top',
notTop: 'headroom--not-top',
bottom: 'headroom--bottom',
notBottom: 'headroom--not-bottom'
}
});
headroomFooter.init();
bottom и notBottom, чтобы корректно
анимировать появление и скрытие..headroom--pinned {
transform: translateY(0);
transition: transform 0.3s ease-in-out;
}
.headroom--unpinned {
transform: translateY(100%);
transition: transform 0.3s ease-in-out;
}
notBottom
и использовать проверку длины документа:if (document.body.scrollHeight <= window.innerHeight) {
footer.style.transform = 'translateY(0)';
}
tolerance, чтобы
избежать слишком резкого скрытия футера при случайных свайпах:tolerance: {
up: 10,
down: 10
}
transform или opacity для
плавного эффекта.Комбинация с другими библиотеками прокрутки Headroom.js можно сочетать с библиотеками типа ScrollMagic для управления футером в более сложных сценариях анимации.
Динамическое изменение класса в зависимости от
позиции Используя события Headroom (onPin,
onUnpin, onTop, onBottom), можно
программно менять вид футера:
headroomFooter.on('onBottom', function() {
footer.classList.add('footer-visible');
});
headroomFooter.on('onUnpin', function() {
footer.classList.remove('footer-visible');
});
stop и start:if (window.scrollY > 1000) {
headroomFooter.stop();
} else {
headroomFooter.start();
}
transform
вместо top или bottom для плавных и
GPU-ускоренных анимаций.<footer id="site-footer" class="headroom">
<p>© 2026 Пример компании</p>
</footer>
<script>
const footer = document.getElementById('site-footer');
const headroomFooter = new Headroom(footer, {
tolerance: { up: 10, down: 10 },
offset: 50,
classes: {
initial: 'headroom',
pinned: 'headroom--pinned',
unpinned: 'headroom--unpinned',
top: 'headroom--top',
notTop: 'headroom--not-top',
bottom: 'headroom--bottom',
notBottom: 'headroom--not-bottom'
}
});
headroomFooter.init();
headroomFooter.on('onPin', () => console.log('Футер показан'));
headroomFooter.on('onUnpin', () => console.log('Футер скрыт'));
</script>
Такой подход позволяет сделать футер динамичным, отзывчивым и не загромождать интерфейс пользователя, сохраняя при этом все возможности управления видимостью, которые предоставляет Headroom.js.