Плавающие кнопки действий

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, поддерживают адаптивность и динамический контент, а также интегрируются с анимационными библиотеками для создания интерактивных интерфейсов.