setScroll() является ключевым методом в библиотеке
Locomotive Scroll, отвечающим за управление положением
скролла и синхронизацию внутренних вычислений с визуальными эффектами.
Он используется для программного обновления состояния скролла после
динамических изменений DOM или при необходимости мгновенного перемещения
к конкретной позиции страницы.
scroll.setScroll(x, y);
Где:
x — горизонтальная координата (по оси X) в
пикселях.y — вертикальная координата (по оси Y) в пикселях.Примечание: Locomotive Scroll по умолчанию работает с вертикальным
скроллом, поэтому чаще всего используется только параметр
y.
Координаты скролла
y): перемещает
контент по вертикали.x):
поддерживается при горизонтальных лэйаутах, требует включенной опции
horizontal: true при инициализации.Влияние на прокручиваемые элементы
setScroll() обновляет внутреннее состояние
Locomotive Scroll, включая:
scroll.instance.scroll — текущее положение
скролла.data-scroll и
data-scroll-speed.data-scroll-sticky).Необходимость вызова после изменений DOM Если на
страницу добавляются новые блоки динамически, их позиция не будет
корректно отслеживаться до вызова setScroll().
// Добавление нового блока
const newSection = document.createElement('section');
newSection.setAttribute('data-scroll', '');
document.body.appendChild(newSection);
// Обновление позиции скролла
scroll.setScroll(0, scroll.scroll.instance.scroll.y);
setScroll() можно использовать для плавного или
мгновенного перемещения к определенной точке страницы. В отличие от
метода scroll.scrollTo(), который управляет анимацией
прокрутки, setScroll() устанавливает положение
моментально, что критично при синхронизации анимаций с
внешними библиотеками, например, GSAP.
// Установка скролла на 500 пикселей вниз
scroll.setScroll(0, 500);
При интеграции с GSAP или другими анимационными библиотеками важно
сначала вызвать setScroll(), чтобы элементы находились в
правильной позиции. Это предотвращает «скачки» анимации и некорректное
срабатывание триггеров:
gsap.fromTo('.box', { y: -100 }, { y: 0, scrollTrigger: {
trigger: '.box',
start: 'top bottom',
onEnter: () => scroll.setScroll(0, scroll.scroll.instance.scroll.y)
}});
fetch('/api/sections')
.then(res => res.json())
.then(data => {
data.forEach(item => {
const section = document.createElement('section');
section.innerHTML = item.content;
section.setAttribute('data-scroll', '');
document.querySelector('#main').appendChild(section);
});
// Обновление состояния скролла после добавления элементов
scroll.setScroll(0, scroll.scroll.instance.scroll.y);
});
scroll.scrollTo(), если требуется плавная
прокрутка.update() можно обеспечить корректное
отображение всех эффектов:scroll.update();
scroll.setScroll(0, scroll.scroll.instance.scroll.y);
setScroll() моментально изменяет
позицию скролла.scrollTo().Эффективное использование setScroll() обеспечивает
точную синхронизацию всех визуальных эффектов и предотвращает баги с
параллаксом, pinned-элементами и динамическими блоками.