В библиотеке Stickybits хуки представляют собой специальные функции,
которые вызываются в процессе жизненного цикла «липкого» элемента. Они
позволяют вмешиваться в работу компонента на ключевых этапах: при
инициализации, изменении состояния, закреплении элемента и при его
освобождении. Хуки в Stickybits реализуются через объект
options при создании экземпляра:
const sticky = stickybits('.sticky-element', {
onSticky: (instance) => { console.log('Элемент стал липким', instance); },
onUnsticky: (instance) => { console.log('Элемент перестал быть липким', instance); },
onFixed: (instance) => { console.log('Элемент зафиксирован', instance); },
onTop: (instance) => { console.log('Элемент достиг верхней границы контейнера', instance); },
onBottom: (instance) => { console.log('Элемент достиг нижней границы контейнера', instance); }
});
Ключевые моменты:
Хуки могут быть полезны для анимаций, динамического изменения стилей, логирования или интеграции с другими библиотеками.
Middleware в Stickybits – это концепция, позволяющая обрабатывать события или данные элемента перед тем, как они будут окончательно применены библиотекой. Middleware представляет собой массив функций, которые вызываются последовательно для каждого «липкого» элемента.
Пример использования middleware:
const sticky = stickybits('.sticky-element', {
useStickyClasses: true,
stickyBitStickyClass: 'is-sticky',
middleware: [
(instance) => {
if (window.scrollY > 500) {
instance.el.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
}
return instance;
},
(instance) => {
instance.el.dataset.processed = true;
return instance;
}
]
});
Особенности работы middleware:
instance, содержащий
ссылку на элемент и его состояние (el, state,
parent, stickyStart,
stickyStop).instance, чтобы
последующие middleware могли корректно работать.Хуки и middleware можно комбинировать для расширенной логики поведения элементов. Например, middleware может изменять стили до срабатывания хуков, а хуки уже будут работать с изменённым состоянием элемента.
Пример комплексного использования:
const sticky = stickybits('.sticky-element', {
useStickyClasses: true,
stickyBitStickyClass: 'is-sticky',
middleware: [
(instance) => {
if (instance.state.isSticky) {
instance.el.style.opacity = 0.9;
}
return instance;
}
],
onSticky: (instance) => {
instance.el.style.transform = 'scale(1.05)';
},
onUnsticky: (instance) => {
instance.el.style.transform = 'scale(1)';
}
});
В этом примере middleware отвечает за непрозрачность элемента в момент закрепления, а хуки управляют визуальным эффектом масштабирования при входе и выходе из состояния «липкости».
Stickybits предоставляет подробный контроль над жизненным циклом элементов через хуки и middleware:
onSticky и
onFixed реагируют на закрепление элемента.onTop и
onBottom позволяют управлять поведением при ограничениях по
высоте.onUnsticky позволяет отменять изменения, сделанные
middleware или другими хуками.instance.state) для точного контроля поведения.Stickybits позволяет создавать динамическое поведение элементов без ручного слежения за scroll-событиями. В комбинации с хуками и middleware можно реализовать:
Хуки и middleware образуют гибкий инструмент для построения сложной интерактивной логики, превращая стандартные sticky-элементы в полноценные динамические компоненты интерфейса.