Для создания новых липких элементов используется библиотека Stickybits, которая позволяет управлять поведением элементов при скролле с минимальными усилиями. Основная функция инициализации выглядит следующим образом:
const sticky = stickybits('.selector', {
stickyBitStickyClass: 'is-sticky',
useStickyClasses: true,
parentClass: 'sticky-parent'
});
.selector — CSS-селектор элементов,
которые необходимо сделать липкими.stickyBitStickyClass — класс, который
добавляется элементу при активации «липкости».useStickyClasses — если
true, библиотека добавляет классы is-sticky,
is-stuck автоматически.parentClass — класс родительского
контейнера, необходимый для корректного позиционирования при
скролле.После инициализации элемент ведёт себя как «липкий»: он остаётся видимым при скролле, пока не достигнет конца родителя.
Stickybits поддерживает инициализацию сразу нескольких элементов через общий селектор. Пример:
stickybits('.sticky-item', { useStickyClasses: true });
Каждый элемент с классом .sticky-item будет
обрабатываться отдельно, добавляя нужные классы при скролле.
Особенности:
Если на страницу динамически добавляются элементы после первоначальной загрузки, их нужно вручную инициализировать с помощью Stickybits:
const newStickyElement = document.createElement('div');
newStickyElement.classList.add('sticky-item');
document.body.appendChild(newStickyElement);
stickybits(newStickyElement, { useStickyClasses: true });
stickybits() для группы
элементов, включая новые, без нарушения работы уже закреплённых
элементов.Stickybits предоставляет несколько ключевых опций, влияющих на работу «липкости»:
stickyBitStickyOffset — смещение от
верхней границы окна при фиксации:stickybits('.sticky-item', { stickyBitStickyOffset: 20 });
Элемент будет оставаться на 20px ниже верхнего края окна при скролле.
useFixed — переключение между CSS
position: sticky и position: fixed:stickybits('.sticky-item', { useFixed: true });
Используется, когда position: sticky не поддерживается
браузером или требуется более сложное управление через JS.
recalcEveryScroll — пересчет позиции
элемента при каждом скролле. Полезно для динамически изменяющихся
элементов, но повышает нагрузку на страницу:stickybits('.sticky-item', { recalcEveryScroll: true });
После создания новых элементов иногда требуется обновить их параметры или полностью удалить «липкость».
sticky.update(); // пересчет позиции всех элементов
sticky.cleanup(); // удаляет все добавленные классы и возвращает элементы в обычное состояние
Для отдельных элементов можно создать новый экземпляр Stickybits, чтобы не затрагивать существующие.
Stickybits генерирует классы is-sticky и
is-stuck. Рекомендуется использовать их для стилизации:
.sticky-item.is-sticky {
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
}
.sticky-item.is-stuck {
background-color: #f8f8f8;
}
is-sticky — элемент фиксирован в окне
и скролл продолжается под ним.is-stuck — элемент достиг конца
родителя и перестал быть фиксированным.Такой подход позволяет полностью отделить логику «липкости» от визуального оформления.
stickybits() на каждом элементе отдельно.recalcEveryScroll, если элементы
статичны.Stickybits обеспечивает гибкое управление липкими элементами, позволяя добавлять новые элементы, настраивать смещения, пересчитывать позиции и использовать классы для CSS-стилизации без сложных JS-расчетов.