Stickybits — это лёгкая JavaScript-библиотека, предназначенная для реализации «липких» элементов на странице. Она предоставляет гибкий API для контроля поведения элементов при скролле. Управление через API позволяет динамически изменять состояние элементов, отключать или обновлять их без необходимости пересоздавать всю структуру.
Для создания липкого элемента используется функция
stickybits(). Она принимает селектор или DOM-элемент и
объект с опциями:
const sticky = stickybits('.sticky-element', {
stickyBitStickyClass: 'is-sticky',
useStickyClasses: true,
verticalPosition: 'top'
});
.sticky-element — селектор элемента,
который необходимо закрепить.stickyBitStickyClass — класс,
добавляемый элементу при активации «липкости».useStickyClasses — позволяет управлять
стилями через CSS-классы.verticalPosition — положение
относительно viewport (top или bottom).Инициализация возвращает объект, который и является API для дальнейшего управления.
1. .update() Обновляет состояние
липкого элемента. Необходим, если контент страницы динамически
изменяется, например, при добавлении новых блоков выше элемента:
sticky.update();
После вызова .update() Stickybits пересчитывает позиции
и корректно закрепляет элемент.
2. .destroy() Полностью отключает
Stickybits для выбранного элемента, удаляя все классы и внутренние
события:
sticky.destroy();
destroy() полезен при динамическом изменении макета
страницы или при удалении элемента из DOM.
3. .cleanup() Удаляет только
добавленные классы, оставляя обработчики событий:
sticky.cleanup();
Разница с .destroy() в том, что cleanup()
не уничтожает экземпляр, а только визуально откатывает изменения.
4. .toggle(state) Позволяет программно
включить или выключить липкость. Принимает булево значение:
sticky.toggle(true); // включить
sticky.toggle(false); // отключить
Это удобно для временного контроля поведения элемента в зависимости от условий, например, ширины окна.
Stickybits позволяет работать не только с одним элементом, но и с коллекцией. Например:
const stickies = stickybits('.sticky-item');
В этом случае возвращается массив объектов с API для каждого элемента:
stickies.forEach(sticky => sticky.update());
Каждый объект в коллекции обладает тем же набором методов
(update, destroy, cleanup,
toggle).
Некоторые свойства можно изменять после инициализации. Например, изменение позиции:
sticky.props.verticalPosition = 'bottom';
sticky.update();
Также можно добавлять кастомные классы:
sticky.props.stickyBitStickyClass = 'custom-sticky';
sticky.update();
Важно всегда вызывать update() после изменения свойств,
чтобы новые параметры вступили в силу.
Stickybits позволяет отслеживать состояние элемента через
пользовательские события. Например, можно слушать появление класса
is-sticky:
const element = document.querySelector('.sticky-element');
element.addEventListener('stickybit:statechange', (event) => {
console.log('Состояние изменилось:', event.detail.isSticky);
});
Событие stickybit:statechange передаёт объект с
ключами:
isSticky — булево значение состояния
элемента.distanceFromTop — расстояние элемента
от верхней границы viewport.Это даёт возможность интегрировать липкие элементы с другими компонентами интерфейса.
update() только при необходимости, так как
частые вызовы при скролле могут влиять на производительность.destroy() для
предотвращения утечек памяти.Динамическое включение липкости при скролле:
const sticky = stickybits('.header', { verticalPosition: 'top' });
window.addEventListener('scroll', () => {
if (window.scrollY > 200) {
sticky.toggle(true);
} else {
sticky.toggle(false);
}
});
Обновление позиции после изменения DOM:
document.querySelector('#add-content').addEventListener('click', () => {
const newBlock = document.createElement('div');
newBlock.innerText = 'Новый блок';
document.body.prepend(newBlock);
sticky.update(); // пересчёт позиции липкого элемента
});
Использование API Stickybits обеспечивает полный контроль над поведением «липких» элементов, позволяя адаптировать их динамически в зависимости от структуры страницы и действий пользователя.