Headroom.js — это легковесная библиотека для управления поведением элементов интерфейса при прокрутке страницы, в первую очередь для «прилипающих» шапок (header). Развитие библиотеки сопровождалось рядом breaking changes, которые важно учитывать при обновлении между версиями. Основные изменения касаются структуры и инициализации, API событий и конфигурационных опций.
В ранних версиях (0.x и ранние 1.x) инициализация Headroom.js выполнялась через прямой вызов конструктора с элементом и опциями:
var header = document.querySelector("#header");
var headroom = new Headroom(header, {
tolerance: 5,
offset: 100,
classes: {
pinned: "header--pinned",
unpinned: "header--unpinned"
}
});
headroom.init();
В версии 0.12+ была введена поддержка инициализации через
data-атрибуты и новый метод Headroom.attach, что
позволило уменьшить boilerplate-код. Старый способ остался рабочим, но
рекомендуется мигрировать на более современные вызовы.
up и down, что позволяет
задавать отдельные пороги для прокрутки вверх и вниз:tolerance: {
up: 10,
down: 5
}
Это изменение важно, поскольку старый синтаксис
{tolerance: 5} теперь интерпретируется иначе, и поведение
header может отличаться.
offset: function() {
return window.innerHeight / 2;
}
Headroom.js использует CSS-классы для управления состояниями header:
headroom--pinnedheadroom--unpinnedheadroom--topheadroom--not-topheadroom--bottomheadroom--not-bottomВ версиях 0.8–0.11 разработчики часто определяли свои классы вручную
через объект classes. В версии 0.12+ стандартные классы
были унифицированы, а поддержка кастомных классов изменилась. Старый
способ задания всех классов через объект по ключу classes
теперь требует точного соответствия новым ключам.
callbacks.headroom.on(eventName, callback):headroom.on("pin", function() {
console.log("Header закреплен");
});
headroom.on("unpin", function() {
console.log("Header скрыт");
});
callbacks: { onPin: ... } теперь
считается устаревшим и может не поддерживаться в будущих версиях.tolerance и при необходимости заменить
число на объект с ключами up и down.pinned, unpinned, top,
notTop, bottom, notBottom.headroom.on.init()
заново для корректного применения.Эти изменения позволяют Headroom.js быть более гибким, безопасным и предсказуемым, но требуют внимательного анализа при обновлении между версиями, особенно если проект активно использует кастомные классы и обработчики событий.