data-scroll-sticky — это атрибут, который позволяет
создавать элементы с фиксированным поведением при скролле, но при этом
сохраняя их внутри определённого контейнера. В отличие от стандартного
position: sticky в CSS, Locomotive Scroll обеспечивает
плавное и предсказуемое поведение, синхронизированное с виртуальным
скроллом библиотеки, что особенно важно при реализации сложных анимаций
и интерактивных эффектов.
Чтобы элемент стал «липким», необходимо добавить к нему два атрибута:
<div data-scroll-container>
<section>
<div data-scroll data-scroll-sticky data-scroll-target="#sticky-parent">
Липкий элемент
</div>
</section>
</div>
Ключевые моменты:
data-scroll-sticky указывает Locomotive Scroll, что
элемент должен вести себя как sticky.data-scroll-target определяет родительский контейнер, в
пределах которого элемент будет фиксироваться. Если атрибут не указан,
по умолчанию используется ближайший родительский элемент с
data-scroll-container.Атрибут data-scroll-target позволяет контролировать
область, в пределах которой элемент остаётся зафиксированным:
<section id="sticky-parent">
<div data-scroll data-scroll-sticky data-scroll-target="#sticky-parent">
Фиксированный блок
</div>
</section>
Здесь элемент будет «липнуть» только пока находится внутри секции с
id sticky-parent. Как только нижняя граница контейнера
достигнута, элемент начинает двигаться вместе с контейнером, не выходя
за его пределы.
Важно: родительский контейнер должен иметь явные размеры и не быть пустым, иначе эффект не будет работать корректно.
data-scroll и
data-scroll-speedЭффекты параллакса не конфликтуют с data-scroll-sticky.
Можно комбинировать фиксированный элемент и скролл-анимацию:
<div data-scroll data-scroll-sticky data-scroll-speed="2" data-scroll-target="#sticky-parent">
Липкий параллакс
</div>
data-scroll-speed позволяет задавать скорость движения
относительно скролла контейнера, создавая эффект ускоренного или
замедленного движения.
data-scroll-offsetПозволяет задавать отступы начала и конца «прилипания»:
<div data-scroll data-scroll-sticky data-scroll-target="#sticky-parent" data-scroll-offset="100,50">
Отступы sticky
</div>
Это удобно для создания эффектов, когда элемент не должен касаться верхнего или нижнего края контейнера.
data-scroll-sticky должен иметь достаточную
высоту и ширину, чтобы его движение выглядело естественным.data-scroll-sticky с событиями Locomotive Scroll, такими
как scroll и call:const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true
});
scroll.on('scroll', (instance) => {
const stickyElement = document.querySelector('[data-scroll-sticky]');
if (instance.scroll.y > 500) {
stickyElement.classList.add('scrolled');
} else {
stickyElement.classList.remove('scrolled');
}
});
Это позволяет менять стили или запускать анимации в момент скролла, сохраняя синхронизацию с виртуальным скроллом библиотеки.
Хотя Locomotive Scroll управляет виртуальным скроллом через JS,
элементы с data-scroll-sticky могут использовать
стандартные CSS-свойства:
[data-scroll-sticky] {
background-color: rgba(255, 255, 255, 0.9);
padding: 20px;
border-radius: 8px;
}
Однако важно помнить, что позиционирование в CSS
(position) не должно конфликтовать с поведением
sticky, то есть position: absolute или
fixed на элементе с data-scroll-sticky может
привести к нежелательным эффектам.
smooth: true.data-scroll-sticky, иначе поведение будет
непредсказуемым.Эти возможности делают data-scroll-sticky мощным
инструментом для создания интерактивных интерфейсов, фиксированных меню,
параллакс-эффектов и динамических блоков, которые реагируют на скролл
пользователя без потери плавности и предсказуемости анимации.