В библиотеке Locomotive Scroll механика закрепления
элементов на странице (sticky) реализуется с помощью
специальных атрибутов, главным из которых является
data-scroll-sticky и связанного с ним
data-scroll-target. Эти атрибуты позволяют создавать
плавное и управляемое поведение «липких» элементов, которые остаются
видимыми в определённой области прокрутки.
data-scroll-stickyАтрибут data-scroll-sticky применяется к элементу,
который должен вести себя как sticky. Его базовое использование выглядит
следующим образом:
Закреплённый блок
Содержимое секции
Ключевые моменты:
data-scroll-sticky будет оставаться
«прилипшим» в пределах родительской секции или указанного target.data-scroll-target sticky элемент ориентируется на
ближайшую родительскую секцию с data-scroll-section.data-scroll-targetdata-scroll-target указывает целевой
блок, в пределах которого sticky элемент должен оставаться
закреплённым. Он может принимать CSS-селектор или идентификатор:
Липкий блок
Контент, в пределах которого действует sticky
Важные аспекты:
Для работы sticky элементов необходимо корректно инициализировать Locomotive Scroll:
import LocomotiveScroll from 'locomotive-scroll';
const scroll = new LocomotiveScroll({
el: document.querySelector('[data-scroll-container]'),
smooth: true,
multiplier: 1.2
});
Особенности sticky:
scroll.update() после изменения DOM.Можно управлять поведением липких элементов через CSS и дополнительные атрибуты:
[data-scroll-sticky] {
position: relative; /* базовая позиция, Locomotive Scroll переписывает её на fixed при скролле */
top: 0;
z-index: 10; /* позволяет элементу оставаться над другими блоками */
}
При использовании нескольких sticky элементов в одной секции рекомендуется:
data-scroll-target для каждого
элемента.z-index, чтобы элементы корректно
наслаивались.pointer-events: none для блокировки взаимодействия с
нижними элементами.Если target или sticky элемент изменяются динамически, необходимо вызвать метод:
scroll.update();
Это пересчитает размеры секций и корректно применит позиции sticky
элементов. Без вызова update() поведение может быть
некорректным.
scroll.update().Типичный сценарий:
Блок с преимуществами
Элемент с преимуществами остаётся на виду, пока не достигнет конца
секции #features. Это позволяет создавать «залипающие»
заголовки, панели инструментов или навигационные блоки, которые остаются
видимыми и не выскакивают за пределы родительской области.