Stickybits — это легковесная JavaScript-библиотека, предназначенная для управления липким позиционированием элементов на странице. Одним из ключевых инструментов, который она предоставляет, является возможность использования callback-функций для реакции на различные события, связанные с состоянием элемента.
Callback-функции позволяют отслеживать изменения состояния элемента и выполнять определённые действия в ответ на эти изменения. В Stickybits основными состояниями являются:
sticky — элемент прилипает к верхней границе окна.stuck — элемент «застревает» в родительском контейнере
после достижения нижней границы.default — элемент находится в обычном потоке
документа.Stickybits предоставляет опцию stickyBitStickyClass для
добавления классов и возможность назначения
callback-функций через событие
onStickyStateChange.
Простейший пример создания sticky-элемента с callback:
import Stickybits from 'stickybits';
const stickyElement = document.querySelector('.sticky');
const stickyInstance = Stickybits(stickyElement, {
stickyBitStickyClass: 'is-sticky',
useStickyClasses: true
});
stickyInstance.addStateChangeListener((state) => {
console.log('Состояние элемента изменилось:', state);
});
В этом примере addStateChangeListener — это метод,
который принимает функцию, вызываемую каждый раз при изменении состояния
элемента. Параметр state может принимать значения
sticky, stuck или default.
1. Изменение стиля элемента при прилипании
Callback позволяет динамически менять CSS-свойства элемента без вмешательства в основной CSS-файл:
stickyInstance.addStateChangeListener((state) => {
if (state === 'sticky') {
stickyElement.style.backgroundColor = 'lightblue';
} else {
stickyElement.style.backgroundColor = '';
}
});
2. Анимация при переходе в состояние stuck
Можно запускать анимации только тогда, когда элемент достигает нижней границы контейнера:
stickyInstance.addStateChangeListener((state) => {
if (state === 'stuck') {
stickyElement.classList.add('animate-stuck');
} else {
stickyElement.classList.remove('animate-stuck');
}
});
3. Логирование событий для аналитики
Callback-функции удобны для отслеживания взаимодействий пользователей с элементами интерфейса:
stickyInstance.addStateChangeListener((state) => {
fetch('/analytics', {
method: 'POST',
body: JSON.stringify({ element: 'header', state }),
headers: { 'Content-Type': 'application/json' }
});
});
Stickybits поддерживает назначение callback-функций на группу элементов. Это удобно для списков навигации или блоков с одинаковым поведением.
const elements = document.querySelectorAll('.sticky-group');
elements.forEach((el) => {
const instance = Stickybits(el, { useStickyClasses: true });
instance.addStateChangeListener((state) => {
console.log(el, 'текущее состояние:', state);
});
});
Кроме методов экземпляра, callback можно задавать прямо при
инициализации Stickybits через опцию onStateChange:
Stickybits('.sticky', {
useStickyClasses: true,
onStateChange: (element, state) => {
console.log('Элемент:', element, 'новое состояние:', state);
}
});
В этой конфигурации первым аргументом передаётся сам элемент DOM, а вторым — новое состояние. Это позволяет разделять логику разных элементов без необходимости создавать отдельный экземпляр Stickybits для каждого.
cleanup:stickyInstance.cleanup();
addStateChangeListener
или опцию onStateChange.sticky,
stuck, default).Такой подход обеспечивает максимальную гибкость и управляемость при работе с липкими элементами, позволяя полностью контролировать их поведение без лишнего кода и сторонних зависимостей.