Headroom.js — это лёгкая JavaScript-библиотека для управления
видимостью заголовков и элементов при прокрутке страницы. Один из
ключевых механизмов работы с библиотекой — обработка специальных
событий, среди которых onBottom позволяет отследить момент,
когда пользователь прокрутил страницу до её нижней границы.
onBottomСобытие onBottom вызывается в тот момент, когда верхняя
граница документа достигает нижнего края окна просмотра. В отличие от
событий прокрутки (onScroll, onPin,
onUnpin), onBottom позволяет реагировать
именно на достижение конца контента, что удобно для:
Для работы с onBottom необходимо инициализировать
Headroom.js для конкретного элемента, чаще всего это
<header> или <nav>:
// Выбор элемента
const header = document.querySelector('header');
// Инициализация Headroom с обработкой onBottom
const headroom = new Headroom(header, {
tolerance: 5,
offset: 50,
onBottom: () => {
console.log('Пользователь достиг нижней части страницы');
// Здесь можно выполнить любую дополнительную логику
}
});
// Активация Headroom
headroom.init();
Пояснение параметров:
tolerance — допустимая величина прокрутки, прежде чем
сработает событие. Позволяет избежать ложных срабатываний при небольших
колебаниях прокрутки.offset — смещение от верхней границы страницы, с
которого начинает действовать Headroom. Для onBottom не
критично, но может влиять на расчёт позиции.onBottom — функция обратного вызова, вызываемая при
достижении нижнего края страницы.Headroom.js внутренне отслеживает положение прокрутки через объект
window.scrollY и размер документа. Событие
onBottom срабатывает, когда выполняется условие:
window.scrollY + window.innerHeight >= document.body.scrollHeight
Таким образом, библиотека учитывает:
window.innerHeight).document.body.scrollHeight).window.scrollY).Это обеспечивает точное срабатывание события даже при динамическом изменении контента страницы.
onBottom для ленивой загрузкиПример практического применения — динамическая подгрузка данных при достижении низа страницы:
const contentContainer = document.querySelector('#content');
const headroom = new Headroom(document.querySelector('header'), {
onBottom: () => {
fetch('/load-more-items')
.then(response => response.json())
.then(data => {
data.items.forEach(item => {
const div = document.createElement('div');
div.className = 'item';
div.textContent = item.name;
contentContainer.appendChild(div);
});
});
}
});
headroom.init();
В этом примере:
Событие onBottom часто комбинируют с другими
обработчиками Headroom.js для создания более сложного поведения:
onPin — фиксирует элемент в видимой позиции при
прокрутке вверх.onUnpin — скрывает элемент при прокрутке вниз.onTop — реагирует на достижение верхней границы
страницы.Пример комплексного использования:
const header = document.querySelector('header');
const headroom = new Headroom(header, {
onPin: () => header.classList.add('visible'),
onUnpin: () => header.classList.remove('visible'),
onBottom: () => {
header.classList.add('at-bottom');
},
onTop: () => {
header.classList.remove('at-bottom');
}
});
headroom.init();
Здесь добавляется CSS-класс at-bottom, когда
пользователь достиг низа страницы, что позволяет задать визуальные
эффекты через CSS:
header.at-bottom {
background-color: rgba(0,0,0,0.8);
}
onBottom всё равно сработает
корректно, так как проверка позиции производится при каждом событии
прокрутки.document.documentElement.scrollHeight.onBottomonBottom для действий, которые логически
должны происходить только при достижении низа.tolerance для сглаживания ложных
срабатываний.onBottom является мощным инструментом для реализации
интерактивного поведения страницы, позволяя легко интегрировать ленивую
загрузку, визуальные эффекты и анимации на нижней границе контента.