Библиотека Stickybits предоставляет удобный инструмент для реализации “липких” элементов на веб-странице, которые фиксируются при прокрутке. Одной из ключевых возможностей является отслеживание изменения состояния элемента — например, перехода между обычным положением, фиксированным состоянием и состоянием «закреплён внизу». Stickybits предлагает встроенные события и методы для работы с этим.
Элемент, к которому применён Stickybits, может находиться в нескольких состояниях:
default – начальное состояние, элемент
находится в потоке документа, не фиксирован.sticky – элемент фиксируется в верхней
части области просмотра при прокрутке.stuck – элемент достиг нижнего края
родительского контейнера и больше не прокручивается с прокруткой
страницы.Каждое из этих состояний задаётся автоматически библиотекой в процессе прокрутки. Для взаимодействия с этими состояниями Stickybits использует классы и события.
Stickybits автоматически добавляет CSS-классы для обозначения текущего состояния элемента:
.js-is-sticky – применяется, когда
элемент фиксируется..js-is-stuck – применяется, когда
элемент «прилипает» к нижней границе контейнера..js-is-default – применяется, когда
элемент находится в исходном положении.Эти классы позволяют управлять стилями через CSS без дополнительного JavaScript-кода. Например:
.sticky-element.js-is-sticky {
background-color: #f0f0f0;
box-shadow: 0 4px 6px rgba(0,0,0,0.1);
}
.sticky-element.js-is-stuck {
background-color: #e0e0e0;
}
Stickybits предоставляет возможность подписки на события изменения состояния элемента. События генерируются при каждом переходе между состояниями:
const sticky = Stickybits('.sticky-element', { stickyBitStickyOffset: 0 });
sticky.onStickyStateCha nge = function(state) {
console.log('Текущее состояние элемента:', state);
};
Значения state могут быть:
'default' – элемент в обычном положении;'sticky' – элемент закреплён;'stuck' – элемент достиг нижнего края контейнера.Использование таких событий позволяет динамически изменять поведение страницы в зависимости от положения элемента, например, запускать анимации или менять внешний вид других блоков.
onStick и onUnstickStickybits поддерживает отдельные коллбэки для более точечного управления:
Stickybits('.sticky-element', {
onStick: function() {
console.log('Элемент теперь фиксирован');
},
onUnstick: function() {
console.log('Элемент перестал быть фиксирован');
}
});
onStick вызывается, когда элемент
входит в состояние sticky.onUnstick вызывается, когда элемент
возвращается в состояние default или достигает
stuck.Эти функции особенно полезны для интеграции с анимациями или управления классами вручную, если требуется более сложная логика.
Stickybits.update()При динамическом изменении DOM (например, добавлении новых элементов или изменении размеров контейнера) важно обновлять вычисления Stickybits, чтобы корректно отслеживать состояния:
sticky.update();
Метод update() пересчитывает позиции и размеры
контейнера и элемента, что предотвращает некорректное срабатывание
классов и событий.
const stickyElement = Stickybits('.sticky-element', { stickyBitStickyOffset: 10 });
stickyElement.onStickyStateCha nge = function(state) {
switch(state) {
case 'default':
console.log('Элемент в исходном положении');
break;
case 'sticky':
console.log('Элемент закреплён');
break;
case 'stuck':
console.log('Элемент достиг низа контейнера');
break;
}
};
В этом примере создаётся единый обработчик, который реагирует на любое изменение состояния элемента. Такая организация кода упрощает управление сложными интерфейсами с множеством липких блоков.
update() только при
необходимости, например, после изменения размера контейнера или
добавления новых элементов.Stickybits обеспечивает прозрачное управление состояниями и гибкую систему событий. Правильное использование классов, коллбэков и методов обновления позволяет создавать сложные интерфейсы с динамическими липкими элементами, поддерживая чистый и поддерживаемый код.