Headroom.js — это библиотека для управления поведением шапки сайта при скролле страницы. Для эффективного использования всех возможностей библиотеки критически важно правильно работать с селекторами элементов, к которым применяется функционал скрытия и показа.
Основным шагом является определение DOM-элемента, который будет контролироваться Headroom. Элемент может быть выбран с помощью стандартных методов Jav * aScript:
// По ID
var header = document.getElementById('site-header');
// По классу (выбирается первый элемент)
var header = document.querySelector('.header-class');
// По CSS-селектору
var header = document.querySelector('header.main-header');
Headroom требует передавать конкретный DOM-элемент, а не строковый селектор. Например, следующий код не будет работать:
var headroom = new Headroom('#site-header'); // ❌ Неверно
Правильная запись:
var header = document.getElementById('site-header');
var headroom = new Headroom(header); // ✅ Корректно
Headroom.js рассчитан на один элемент за раз. Если нужно применить одинаковое поведение к нескольким шапкам или блокам, необходимо инициализировать отдельный экземпляр для каждого:
var headers = document.querySelectorAll('.header');
headers.forEach(function(header) {
var headroom = new Headroom(header);
headroom.init();
});
Важно понимать, что querySelectorAll возвращает
NodeList, а не одиночный элемент, поэтому сразу
передавать его в Headroom нельзя — требуется перебор.
Headroom.js активно использует CSS-классы для управления состояниями элемента:
headroom--pinned — элемент видимheadroom--unpinned — элемент скрытheadroom--top — страница в верхней позицииheadroom--not-top — страница прокручена внизheadroom--bottom — достигнут низ страницыЭти классы добавляются автоматически при скролле, но можно управлять ими через селекторы в CSS:
.headroom--unpinned {
transform: translateY(-100%);
transition: transform 0.3s ease-in-out;
}
.headroom--pinned {
transform: translateY(0);
transition: transform 0.3s ease-in-out;
}
Эффективная работа с селекторами позволяет создавать гибкие стили и подключать Headroom.js к любому элементу страницы.
Помимо прямого выбора элементов, можно использовать кастомные селекторы для динамических страниц:
var header = document.querySelector('.dynamic-header[data-role="main"]');
var headroom = new Headroom(header, {
tolerance: {
up: 10,
down: 5
},
offset: 50
});
headroom.init();
Использование атрибутов (data-*) повышает точность
выбора и упрощает интеграцию Headroom на сайтах с несколькими
шаблонами.
В Headroom.js можно передавать дополнительные настройки при инициализации элемента:
var header = document.querySelector('.site-header');
var headroom = new Headroom(header, {
tolerance: 10, // Чувствительность к скроллу
offset: 100, // Пиксели до начала скрытия
classes: {
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned"
}
});
headroom.init();
Опции позволяют настроить поведение под конкретный элемент, не влияя на остальные блоки страницы.
С помощью селекторов можно также привязывать события к состояниям Headroom:
var header = document.querySelector('.site-header');
var headroom = new Headroom(header);
header.addEventListener('headroom-pin', function() {
console.log('Элемент закреплен');
});
header.addEventListener('headroom-unpin', function() {
console.log('Элемент скрыт');
});
headroom.init();
Такой подход позволяет комбинировать выбор элементов через селекторы и реакцию на их динамическое поведение, создавая интерактивные и отзывчивые интерфейсы.
querySelector и
querySelectorAll для сложных CSS-селекторов.Эффективное управление элементами через селекторы — ключ к стабильной и предсказуемой работе Headroom.js на любом веб-проекте.