Stickybits — это лёгкая библиотека на JavaScript, которая упрощает
создание «липких» элементов на веб-странице. Для боковых панелей она
особенно полезна, поскольку позволяет закреплять панель при прокрутке,
не перегружая страницу сложными CSS-свойствами
position: sticky, которые могут вести себя непредсказуемо
на старых браузерах или при динамическом контенте.
Ключевая задача при работе с боковыми панелями — удерживать панель в видимой области экрана, пока не достигнут нижний предел контейнера, и корректно сбрасывать её позицию, когда она должна «отлипнуть».
import stickybits from 'stickybits';
const sidebar = document.querySelector('.sidebar');
stickybits(sidebar, {
stickyBitStickyOffset: 20,
useStickyClasses: true,
verticalPosition: 'top'
});
Пояснения:
stickyBitStickyOffset: задаёт отступ от верхнего края
экрана, при котором панель становится «липкой».useStickyClasses: добавляет CSS-классы
is-sticky и is-stuck, упрощая управление
стилями.verticalPosition: определяет, с какой стороны панель
будет закреплена (top или bottom).Боковые панели часто ограничены по высоте родительским блоком. Stickybits автоматически учитывает высоту родителя, что позволяет панели корректно «отлипать» у нижней границы.
stickybits('.sidebar', {
parent: '.content-wrapper',
stickyBitStickyOffset: 10
});
parent — селектор родительского блока. Панель не выйдет
за пределы его границ.Stickybits добавляет три ключевых класса:
.is-sticky — элемент закреплён и
прокручивается вместе со страницей..is-stuck — панель достигла конца
контейнера и «отлипла»..stickybit — базовый класс, который
можно использовать для кастомизации.Пример кастомизации:
.sidebar.is-sticky {
box-shadow: 0 2px 8px rgba(0,0,0,0.2);
background-color: #fff;
}
.sidebar.is-stuck {
opacity: 0.9;
}
Использование классов позволяет плавно менять стиль панели в зависимости от её состояния.
Если контент страницы меняется после инициализации (например, подгружаются изображения или AJAX), Stickybits нужно пересоздать или обновить:
const sidebarInstance = stickybits('.sidebar');
// После динамической загрузки контента
sidebarInstance.update();
Метод .update() пересчитывает позиции и размеры,
гарантируя, что панель будет корректно «прилипать» даже при изменении
высоты родителя.
Stickybits минимизирует нагрузку на браузер, но при сложных страницах рекомендуется:
requestAnimationFrame при частой смене
размеров или при анимациях.stickyBitStickyOffset, чтобы
избежать постоянных пересчетов.Множественные панели: можно инициализировать Stickybits для группы элементов:
stickybits('.sidebar, .promo-panel', {
useStickyClasses: true
});
Программное снятие липкости:
const instance = stickybits('.sidebar');
instance.cleanup();
Метод .cleanup() удаляет все классы и слушатели событий,
возвращая панель к обычному состоянию. Это полезно при изменении макета
на мобильной версии.
position: relative в родительском
блоке, чтобы Stickybits корректно вычислял координаты.verticalPosition: 'top' для панели,
которая должна следовать за прокруткой сверху.Stickybits обеспечивает гибкий контроль над поведением боковых панелей без сложного кода, добавляя только минимальные слушатели и классы для управления состоянием. При правильной настройке панель остаётся всегда видимой, корректно взаимодействует с футером и динамическим контентом, и легко кастомизируется под любые дизайнерские требования.