scrollEl — один из ключевых параметров библиотеки
Stickybits, отвечающий за определение контейнера, внутри которого
происходит отслеживание скролла элемента. По умолчанию Stickybits
отслеживает прокрутку всего документа (window), однако в
сложных макетах часто требуется привязка к конкретному контейнеру с
прокруткой. Правильная настройка scrollEl позволяет
добиться корректного позиционирования «липкого» элемента в пределах
родителя.
stickybits('.sticky-element', {
scrollEl: '.scroll-container'
});
.sticky-element — селектор элемента, который должен
быть фиксированным при скролле.scrollEl — селектор или DOM-элемент контейнера с
прокруткой.Можно передавать scrollEl как:
'div.scrollable',
'body'.document.querySelector('.scrollable').Если scrollEl не указан, Stickybits автоматически
использует window как источник события
scroll.
scrollElОграничение области фиксации Липкий элемент
будет оставаться внутри родительского контейнера, заданного через
scrollEl. Например, если контейнер меньше по высоте, чем
сам элемент, Stickybits корректно остановит его у нижней границы
контейнера.
Отслеживание прокрутки контейнера Библиотека
подписывается на событие scroll именно выбранного элемента,
что позволяет реализовать эффект «липкости» в элементах с внутренней
прокруткой, не затрагивая глобальный скролл документа.
Корректное позиционирование при изменении
размеров Stickybits учитывает размеры контейнера
(scrollEl) и элемента, поэтому даже при изменении высоты
контейнера или окна браузера позиция элемента обновляется автоматически
при вызове метода .update().
Пример 1: Фиксация элемента внутри конкретного контейнера
const container = document.querySelector('.scrollable');
stickybits('.sticky-element', {
scrollEl: container
});
Элемент .sticky-element будет оставаться фиксированным
только внутри блока .scrollable. При достижении нижнего
края контейнера элемент перестанет «липнуть» и останется на месте.
Пример 2: Использование селектора строки
stickybits('.sticky-element', {
scrollEl: '.scrollable'
});
Идентично предыдущему примеру, но используется селектор вместо прямого DOM-объекта.
Пример 3: Липкий элемент без scrollEl
stickybits('.sticky-element');
В этом случае scrollEl по умолчанию равен
window. Элемент будет «прилипать» относительно всего
документа.
scrollElconst container = document.querySelector('.scrollable');
if (container) {
stickybits('.sticky-element', { scrollEl: container });
}
Совместимость с динамическими изменениями DOM
Если контейнер создаётся динамически, нужно инициализировать Stickybits
после вставки элемента в DOM. Иначе scrollEl не будет
найден.
Влияние CSS-свойства overflow Чтобы
Stickybits корректно отслеживал скролл, контейнер должен иметь
overflow: auto или overflow: scroll. Если
overflow: hidden, событие прокрутки не произойдёт.
Множественные sticky-элементы внутри одного scrollEl Stickybits корректно обрабатывает несколько элементов внутри одного контейнера. Каждый элемент будет фиксироваться и отпускаться на границах контейнера независимо.
.update() — пересчитывает размеры и
позиции элемента с учётом текущего контейнера scrollEl..destroy() — снимает все слушатели с
scrollEl и возвращает элемент в исходное состояние.const sticky = stickybits('.sticky-element', { scrollEl: '.scrollable' });
// Обновление после изменения высоты контейнера
sticky.update();
// Удаление sticky-поведения
sticky.destroy();
При использовании scrollEl в сложных макетах с высокой
частотой скролла рекомендуется:
position: sticky в CSS как fallback, если
поддержка браузеров позволяет..update() только при необходимости (например,
после изменения размеров контейнера), а не на каждом кадре
анимации.scrollEloverflow для контейнера..update() и .destroy() помогают
корректно управлять элементами при изменениях контейнера.Настройка scrollEl — это фундамент для сложных
интерфейсов с внутренней прокруткой, где обычное фиксирование через
window не обеспечивает точного контроля над положением
элементов.