Locomotive Scroll предоставляет возможность управлять скроллом не
только через стандартный контейнер, но и из любых мест документа. Метод
scrollFromAnywhere позволяет инициировать плавную прокрутку
к определённой позиции или элементу, независимо от того, какой контейнер
используется для виртуального скролла.
Метод вызывается через экземпляр объекта Locomotive Scroll:
scroll.scrollFromAnywhere(target, options);
target – может быть:
'#section2',
'.item'),500),document.querySelector('#section2')).options – объект с параметрами
управления прокруткой:
offset (number) – смещение относительно
верхней границы контейнера. Позволяет учитывать фиксированные шапки или
дополнительные отступы.duration (number) – время анимации в
миллисекундах.easing (string) – тип кривой анимации
('linear', 'easeInOutQuad' и т.д.).disableLerp (boolean) – отключает интерполяцию
скорости скролла для мгновенного перемещения.Пример:
scroll.scrollFromAnywhere('#section3', {
offset: -50,
duration: 1200,
easing: 'easeInOutCubic'
});
В этом примере прокрутка выполнится к элементу с идентификатором
section3, с учётом отрицательного смещения 50px, плавно за
1,2 секунды.
Метод поддерживает абсолютные координаты по вертикали и горизонтали:
scroll.scrollFromAnywhere(800, {
duration: 1000,
easing: 'easeOutQuad'
});
x и
y:scroll.scrollFromAnywhere({ x: 0, y: 400 }, { duration: 800 });
Это особенно полезно при горизонтальном скролле или при нестандартных контейнерах.
Locomotive Scroll позволяет задавать кастомный контейнер для скролла
через опцию el. scrollFromAnywhere корректно
учитывает любой контейнер:
const customScroll = new LocomotiveScroll({
el: document.querySelector('#custom-container'),
smooth: true
});
customScroll.scrollFromAnywhere('#item5', { duration: 1500 });
Метод автоматически рассчитывает позицию элемента относительно заданного контейнера и выполняет плавный переход.
Можно создавать функции для динамической прокрутки на основе событий или пользовательских действий:
document.querySelectorAll('.nav-link').forEach(link => {
link.addEventListener('click', (e) => {
e.preventDefault();
const targetID = link.getAttribute('href');
scroll.scrollFromAnywhere(targetID, { duration: 1000, offset: -100 });
});
});
В этом примере навигация по якорям работает плавно и учитывает смещение, что важно при фиксированных шапках или адаптивных макетах.
Метод scrollFromAnywhere поддерживает стандартные
функции интерполяции. Для сложных анимаций можно использовать кастомные
функции:
scroll.scrollFromAnywhere('#section7', {
duration: 2000,
easing: function(t) { return t*t*t; } // кубическая кривая
});
t => tt => t*tt => t*(2-t)t => t<0.5 ? 4*t*t*t : 1 - Math.pow(-2*t + 2, 3)/2Кастомные кривые позволяют создавать уникальные эффекты скролла, подстраивая скорость движения под дизайн страницы.
По умолчанию Locomotive Scroll применяет интерполяцию
(lerp) для плавности движения. Если нужно мгновенное
перемещение:
scroll.scrollFromAnywhere('#section9', {
duration: 0,
disableLerp: true
});
Locomotive Scroll поддерживает горизонтальные контейнеры
(direction: 'horizontal'). В этом случае
scrollFromAnywhere принимает объект с координатами
x и y:
scroll.scrollFromAnywhere({ x: 500, y: 0 }, { duration: 1200, easing: 'easeInOutQuad' });
x – горизонтальная позицияy – вертикальная (обычно 0 для горизонтального
скролла)scrollFromAnywhere хорошо комбинируется с:
on('scroll', callback) – для запуска
анимаций при скролле.scrollTo – для синхронизации
стандартного метода скролла и вызова из внешних событий.update – для пересчёта размеров после
динамических изменений DOM.Пример динамического вызова:
scroll.on('scroll', ({ scroll }) => {
if(scroll.y > 1000) {
scroll.scrollFromAnywhere('#footer', { duration: 1500 });
}
});