Stickybits — это лёгкая JavaScript-библиотека для управления «липким»
поведением элементов при прокрутке страницы. Основная цель библиотеки —
сделать элементы, которые должны оставаться на виду при скролле,
максимально гибкими и управляемыми, без необходимости использования
сложного CSS position: sticky и сложных хаков с
scroll-событиями.
При подключении Stickybits к элементу создаётся «контейнер», который отслеживает положение элемента относительно окна браузера и динамически применяет классы и стили для реализации поведения «прилипания».
// Инициализация Stickybits
const sticky = stickybits('.sticky-element', {
useStickyClasses: true,
stickyBitStickyOffset: 0,
});
Ключевые параметры:
useStickyClasses — позволяет библиотеке автоматически
добавлять классы .is-sticky, .is-stuck и
.is-flowing для управления состояниями элемента.stickyBitStickyOffset — задаёт смещение элемента от
верхней границы окна при активации «прилипания».verticalPosition — устанавливает позицию прилипшего
элемента (top или bottom).noStyles — отключает автоматическую установку стилей;
используется, если стили обрабатываются через CSS.Stickybits выделяет три основных состояния:
Эти состояния обозначаются соответствующими CSS-классами, что облегчает стилизацию:
.sticky-element.is-sticky {
background-color: rgba(255, 255, 255, 0.9);
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.sticky-element.is-stuck {
opacity: 0.8;
}
Stickybits автоматически отслеживает событие scroll
браузера и пересчитывает позицию элемента при каждой прокрутке. Это
позволяет реализовать поведение «прилипания» без ручного управления
скроллом.
Чтобы избежать нагрузки на рендеринг при частой прокрутке, Stickybits
использует requestAnimationFrame для обновления позиции
элементов. Это гарантирует, что изменения стилей происходят синхронно с
перерисовкой браузера.
function updatePosition() {
sticky.update();
requestAnimationFrame(updatePosition);
}
requestAnimationFrame(updatePosition);
Stickybits предоставляет методы для динамического контроля элементов:
stickybits.addInstance(element) — добавляет новый
элемент для отслеживания.stickybits.removeInstance(element) — удаляет элемент из
списка «липких».stickybits.update(element) — пересчитывает позицию
конкретного элемента.Пример динамического добавления элемента при скролле:
window.addEventListener('scroll', () => {
if (window.scrollY > 500) {
stickybits.addInstance(document.querySelector('.new-sticky'));
}
});
Stickybits корректно обрабатывает изменение размеров окна и динамическое появление контента.
stickyBitStickyOffset.window.addEventListener('resize', () => {
sticky.update();
});
Stickybits легко интегрируется с CSS-анимациями для плавного перехода
между состояниями. Для этого достаточно использовать классы
.is-sticky и .is-stuck:
.sticky-element {
transition: all 0.3s ease;
}
Это позволяет создавать эффект «выдвигающегося» меню, фиксированных панелей или подсветки заголовков при прокрутке.
display: table или
display: inline-block могут требовать обёртки для
корректной работы.z-index.Stickybits упрощает работу с прокруткой и «липкими» элементами,
обеспечивая стабильное и предсказуемое поведение, при этом снижая
необходимость ручной работы со scroll-событиями и сложными
CSS-правилами.