Stickybits — это лёгкая JavaScript-библиотека, предназначенная для
управления «липкими» элементами на веб-странице с помощью CSS
position: sticky. Она обеспечивает кроссбраузерную
поддержку и позволяет динамически адаптировать поведение элементов при
скролле, минимизируя ручное вмешательство в стили и JavaScript-код.
Основные функции библиотеки включают:
position: sticky для браузеров, где нативная
поддержка ограничена.Библиотека создаёт объект для одного или нескольких элементов с
помощью функции stickybits(target, options).
import stickybits from 'stickybits';
const sticky = stickybits('.my-element', {
stickyBitStickyOffset: 10,
useStickyClasses: true,
verticalPosition: 'top'
});
Параметры и опции:
stickyBitStickyOffset — число пикселей, на которое
элемент будет смещён от верхнего края контейнера при «прилипании».useStickyClasses — если true, библиотека
добавляет классы is-sticky, is-stuck для
управления стилями через CSS.verticalPosition — положение элемента: top
или bottom.noStyles — если true, библиотека не
добавляет встроенные стили, позволяя полностью контролировать оформление
через CSS.Stickybits автоматически добавляет классы, которые можно использовать для стилизации элементов:
is-sticky — элемент в данный момент
«липкий».is-stuck — элемент достиг нижней
границы контейнера и больше не остаётся прилипшим.has-stickybit — базовый класс,
указывающий, что элемент управляется Stickybits.Пример использования классов для CSS:
.is-sticky {
box-shadow: 0 2px 6px rgba(0,0,0,0.2);
}
.is-stuck {
background-color: #f8f8f8;
}
Stickybits позволяет задавать контейнеры, в пределах которых элемент будет оставаться «липким». Это предотвращает пересечение с другими блоками страницы.
stickybits('.my-element', {
parentClass: '.container',
stickyBitStickyOffset: 20
});
При достижении нижней границы контейнера элемент перестает прилипать и остаётся в конце блока. Контейнер автоматически рассчитывается при инициализации, что исключает необходимость ручного вычисления высот.
Библиотека предоставляет возможность отключать «липкость» на мобильных устройствах, где скролл и ограниченная площадь экрана могут вызывать проблемы с UX:
stickybits('.my-element', {
useStickyClasses: true,
stickyBitStickyOffset: 0,
disableSticky: window.innerWidth < 768
});
Это позволяет гибко управлять поведением на разных разрешениях без дополнительных медиа-запросов в CSS.
Stickybits предоставляет методы для динамического управления элементами после инициализации:
update() — пересчитывает позиции
элементов, полезно при изменении размеров контейнера.destroy() — удаляет все добавленные
классы и встроенные стили, возвращая элемент в исходное состояние.Пример:
const sticky = stickybits('.my-element');
sticky.update(); // пересчет позиции
sticky.destroy(); // удаление Stickybits
Stickybits поддерживает работу с коллекциями элементов. Можно передать селектор, возвращающий NodeList, или массив DOM-узлов:
stickybits(document.querySelectorAll('.item'), {
useStickyClasses: true
});
Каждый элемент получает отдельный экземпляр управления «липкостью», при этом общие настройки наследуются.
Stickybits хорошо сочетается с фреймворками вроде React и Vue. При
использовании CSS-фреймворков можно отключить встроенные стили
(noStyles: true) и полностью контролировать внешний вид
через классы состояния. Это упрощает адаптацию под существующие темы и
дизайн-системы.
Stickybits оптимизирован для минимального влияния на производительность:
requestAnimationFrame для обработки
скролла.stickyBitStickyOffset для уменьшения
количества вычислений.Stickybits позволяет создавать надёжные, кроссбраузерные «липкие» элементы, обеспечивая гибкость настройки, поддержку динамических контейнеров и интеграцию с современными фронтенд-фреймворками. Использование классов состояния и встроенных опций делает библиотеку удобной для проектов любой сложности.