Stickybits — это лёгкая библиотека на JavaScript, предназначенная для
реализации “липких” элементов на веб-странице. Она обеспечивает
управление поведением элементов при прокрутке страницы, заменяя
стандартное CSS-свойство position: sticky и расширяя его
функциональность. Основная задача Stickybits — закрепить элемент на
определённой позиции при скролле и вернуть его в исходное положение при
необходимости.
Библиотека работает с DOM-элементами через прямое присвоение классов
и стилей, при этом минимизируя зависимость от сторонних библиотек.
Stickybits может корректно функционировать в старых браузерах, где
position: sticky поддерживается частично или
отсутствует.
Для работы с Stickybits необходимо создать экземпляр библиотеки и передать ему элемент или селектор:
const sticky = stickybits('.sticky-element');
Здесь .sticky-element — CSS-класс или любой селектор
элемента, который должен становиться липким. После инициализации
Stickybits добавляет элементу необходимые inline-стили и классы, чтобы
обеспечить его поведение при прокрутке.
Ключевые опции и их назначение при инициализации:
stickyBitStickyOffset — задаёт смещение элемента от
верхнего края окна браузера. Позволяет сделать отступ перед
фиксацией.useStickyClasses — включает добавление CSS-классов
(.js-is-sticky, .js-is-stuck) для возможности
кастомного оформления через CSS.verticalPosition — указывает, где закреплять элемент
(top или bottom).noStyles — отключает автоматическую вставку
inline-стилей, оставляя оформление полностью на CSS.Пример с опциями:
stickybits('.sticky-element', {
stickyBitStickyOffset: 10,
useStickyClasses: true,
verticalPosition: 'top',
noStyles: false
});
Stickybits отслеживает позицию элемента относительно окна браузера при прокрутке. Когда элемент достигает заданного смещения, библиотека:
js-is-sticky.position: fixed с указанным смещением.Если элемент больше не должен быть фиксированным, Stickybits удаляет
класс и возвращает position в исходное состояние.
С помощью классов .js-is-stuck можно определить момент,
когда элемент достиг конца контейнера, чтобы ограничить его движение.
Это особенно полезно для длинных блоков контента, где элемент не должен
выходить за пределы родительского контейнера.
Stickybits поддерживает привязку к множеству элементов одновременно:
stickybits('.sticky-item');
В этом случае библиотека создаёт внутренний объект для каждого элемента, отдельно отслеживая их позиции и добавляя соответствующие стили и классы. Это позволяет реализовывать сложные интерфейсы с несколькими липкими панелями на одной странице.
Stickybits хорошо интегрируется с CSS-переходами и анимациями. Классы
js-is-sticky и js-is-stuck можно использовать
для плавного изменения внешнего вида:
.sticky-element {
transition: all 0.3s ease;
}
.sticky-element.js-is-sticky {
background-color: rgba(255, 255, 255, 0.9);
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
Также библиотека корректно работает с flex-контейнерами и grid-сетками, автоматически вычисляя размеры элемента и родительского блока.
Stickybits предоставляет методы для динамического управления элементами после инициализации:
update() — пересчитывает позиции и обновляет состояние
элементов. Полезно при изменении DOM или размеров страницы.destroy() — полностью убирает все классы и стили,
возвращая элемент в исходное состояние.Пример использования:
const sticky = stickybits('.sticky-element');
// Обновление при изменении контента
sticky.update();
// Полное удаление Stickybits
sticky.destroy();
position: sticky.Stickybits идеально подходит для реализации фиксированных панелей навигации, боковых меню, кнопок “вверх” и других интерактивных элементов, которые должны оставаться видимыми при прокрутке страницы.