Stickybits — это лёгкая библиотека для управления «липкими» элементами на странице, обеспечивающая плавное поведение и корректное взаимодействие с DOM без использования тяжелых плагинов. Она позволяет элементам фиксироваться в верхней части окна при прокрутке, сохраняя естественную структуру документа и поддерживая адаптивность.
Библиотека работает с любыми DOM-элементами, но особенно полезна для плавающих кнопок действий (FAB — Floating Action Buttons), которые должны оставаться видимыми пользователю при скролле.
Для подключения Stickybits можно использовать CDN или npm:
<script src="https://cdn.jsdelivr.net/npm/stickybits@3.7.6/dist/stickybits.min.js"></script>
или через npm:
npm install stickybits
После установки и подключения библиотеку можно инициализировать через Jav * aScript:
stickybits('.fab-button', {
stickyBitStickyOffset: 20,
useStickyClasses: true,
scrollEl: window
});
Ключевые параметры:
stickyBitStickyOffset — смещение от верхнего края окна,
при котором элемент становится липким.useStickyClasses — включение CSS-классов для управления
состояниями (.is-sticky, .is-stuck).scrollEl — контейнер для отслеживания скролла (по
умолчанию window).Плавающая кнопка действий обычно располагается в правом нижнем углу экрана. Stickybits позволяет реализовать её «прилипание» без нарушения потока документа, что важно для корректного поведения на мобильных устройствах.
<button class="fab-button">+</button>
.fab-button {
position: absolute;
bottom: 20px;
right: 20px;
width: 56px;
height: 56px;
border-radius: 50%;
background-color: #007bff;
color: white;
border: none;
font-size: 24px;
cursor: pointer;
transition: transform 0.3s ease;
}
.fab-button.is-sticky {
position: fixed;
bottom: 20px;
right: 20px;
}
.fab-button.is-stuck {
transform: scale(0.9);
}
Здесь is-sticky применяется в момент, когда кнопка
фиксируется у верхнего края видимой области, а is-stuck
можно использовать для анимации при достижении конца контейнера.
Stickybits можно инициализировать как для одного элемента, так и для группы:
const fabButtons = stickybits('.fab-button', {
stickyBitStickyOffset: 20,
useStickyClasses: true
});
Полученный объект позволяет управлять состоянием:
fabButtons.forEach(item => {
item.cleanup(); // удаляет все обработчики и CSS-классы
item.update(); // обновляет положение и пересчитывает смещение
});
1. Липкость внутри контейнера
Для кнопок, находящихся внутри определённого блока, можно ограничить «прилипание» границами родителя:
stickybits('.fab-button', {
parentClass: 'fab-container',
stickyBitStickyOffset: 20
});
Элемент будет фиксироваться только до нижней границы
.fab-container.
2. Поддержка динамического контента
Stickybits автоматически отслеживает изменения DOM, но для
динамически добавляемых элементов рекомендуется вызывать
update() после вставки:
const newButton = document.createElement('button');
newButton.classList.add('fab-button');
document.body.appendChild(newButton);
stickybits(newButton, {
stickyBitStickyOffset: 20
}).update();
3. Кастомизация через CSS
Библиотека добавляет классы .is-sticky и
.is-stuck, что позволяет реализовать любые визуальные
эффекты — изменение цвета, анимацию появления, тень или
масштабирование.
.fab-button.is-sticky {
box-shadow: 0 4px 10px rgba(0,0,0,0.3);
}
.fab-button.is-stuck {
opacity: 0.8;
transform: translateY(-10px);
}
Stickybits оптимизирован для минимального потребления ресурсов и
использует requestAnimationFrame для обновления состояния
при скролле. Для страниц с множеством плавающих элементов
рекомендуется:
update() только при изменении
DOM.Stickybits корректно работает на мобильных устройствах и поддерживает адаптивное позиционирование. Для кнопок, которые должны быть видимы на всех экранах, рекомендуется:
stickyBitStickyOffset, чтобы
кнопка не перекрывала системные панели.@media (max-width: 768px) {
.fab-button {
width: 48px;
height: 48px;
bottom: 16px;
right: 16px;
}
}
Stickybits можно использовать вместе с анимационными библиотеками (например, GSAP) для плавного появления кнопок при прокрутке:
stickybits('.fab-button', {useStickyClasses: true});
gsap.from('.fab-button.is-sticky', {scale: 0, duration: 0.3});
Это позволяет создавать современные интерфейсы с плавными эффектами и поддержкой мобильных устройств.
Плавающие кнопки действий с Stickybits обеспечивают стабильное и предсказуемое поведение при прокрутке, легко кастомизируются через CSS и JavaScript, поддерживают адаптивность и динамический контент, а также интегрируются с анимационными библиотеками для создания интерактивных интерфейсов.