В библиотеке Locomotive Scroll атрибут
data-scroll-sticky используется для реализации эффекта
«липкого» элемента, который закрепляется на экране при прокрутке
определенной области. Этот механизм отличается от стандартного
CSS-свойства position: sticky, так как полностью
управляется скриптом, учитывает виртуальный скролл и поддерживает
анимации в связке с другими функциональностями библиотеки.
Определение контейнера Элемент с
data-scroll-sticky должен находиться внутри контейнера с
data-scroll-container. Контейнер задает границы, в пределах
которых элемент будет «липнуть».
<div data-scroll-container>
<div data-scroll-sticky data-scroll-target="#section">
Липкий элемент
</div>
</div>
В этом примере элемент закрепляется относительно блока
#section.
Атрибут data-scroll-target
Указывает на родительский блок, внутри которого элемент будет
фиксироваться. Если не указан, элемент привязывается к ближайшему
родителю с прокруткой.
Вычисление позиции Locomotive Scroll использует виртуальный скролл, то есть смещение контента задается через transform: translateY. Липкий элемент привязывается к этим вычислениям:
position: fixed (через
JS, а не CSS).Зависимость от высоты элементов Высота липкого элемента и высота контейнера критически важны:
data-scroll-offset Задает смещение
от верха контейнера или viewport, при котором начинается фиксация.
<div data-scroll-sticky data-scroll-target="#section" data-scroll-offset="50">
Липкий блок с отступом 50px
</div>
Значение может быть в пикселях (50) или в процентах
(10%).
data-scroll-repeat Позволяет
элементу повторно фиксироваться при повторном прохождении границ
контейнера. Без этого атрибута фиксация срабатывает только один раз при
прокрутке вниз.
Анимации и transform Поскольку Locomotive Scroll
использует transform для виртуального скролла, все стили
position: fixed на липком элементе применяются через JS.
Это позволяет интегрировать data-scroll-sticky с
data-scroll анимациями: изменение opacity, scale, translate
и т.д. выполняется синхронно с фиксацией элемента.
data-scroll-sticky при
событии resize.<div id="section" data-scroll-container>
<div data-scroll-sticky data-scroll-target="#section" data-scroll-offset="20">
Закреплённый блок
</div>
<div style="height: 2000px;">Контент для прокрутки</div>
</div>
<script>
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true
});
</script>
В этом примере блок будет фиксироваться в верхней части viewport при
прокрутке до верхней границы контейнера #section с отступом
20px. После достижения нижней границы контейнера элемент перестанет быть
фиксированным.
scroll.update(), чтобы библиотека
пересчитала все позиции.Эти принципы позволяют создавать точный и плавный эффект липких
блоков, полностью управляемый скриптом, с поддержкой анимаций и
адаптивной верстки, что делает data-scroll-sticky мощным
инструментом для интерактивного интерфейса.