ScrollMagic — библиотека для управления анимацией и триггерами на основе прокрутки страницы. Одной из ключевых возможностей является поддержка горизонтальной прокрутки, которая позволяет создавать эффектные слайдеры, параллакс-эффекты и интерактивные интерфейсы с движением элементов слева направо. Горизонтальная прокрутка в ScrollMagic реализуется через сочетание контроллеров, сцен и корректного определения направления оси.
Контроллер (ScrollMagic.Controller) отвечает за
отслеживание позиции скролла и обновление сцен. Для горизонтальной
прокрутки необходимо указать направление оси:
var controller = new ScrollMagic.Controller({
vertical: false // отключение вертикальной оси
});
Ключевой момент: vertical: false
переводит всю логику библиотеки в горизонтальное измерение, что влияет
на расчёт позиции сцены, триггеров и длительности анимаций.
Сцена (ScrollMagic.Scene) определяет, когда и как
элемент анимируется. Для горизонтальной прокрутки используются те же
свойства, что и для вертикальной, но координаты смещаются по оси X.
var scene = new ScrollMagic.Scene({
triggerElement: "#slide1", // элемент, при достижении которого срабатывает анимация
duration: 500, // длина сцены в пикселях по горизонтали
triggerHook: 0.5 // положение триггера на экране (0 = верх/лево, 1 = низ/право)
})
.setTween("#animateBox", {x: 400}) // анимация по оси X
.addTo(controller);
Особенности:
duration в горизонтальной прокрутке измеряется в
пикселях по ширине, а не по высоте..setTween() должна учитывать
x вместо y для смещения по горизонтали.triggerHook остаётся относительным, но отсчитывается от
левой границы окна.Для создания параллакса горизонтальные сцены часто используют
TimelineMax или GSAP:
var tl = gsap.timeline();
tl.to("#bgLayer", {x: -200, ease: "power1.out"})
.to("#fgLayer", {x: 200, ease: "power1.in"}, 0);
var scene = new ScrollMagic.Scene({
triggerElement: "#section",
duration: 1000
})
.setTween(tl)
.addTo(controller);
Примечания:
x могут быть как положительными, так и
отрицательными, в зависимости от направления движения элементов.timeline) обеспечивает
синхронизацию нескольких анимаций на одной сцене.ScrollMagic позволяет закреплять элемент на экране во время
горизонтальной прокрутки с помощью свойства setPin:
var scene = new ScrollMagic.Scene({
triggerElement: "#pinTrigger",
duration: 800
})
.setPin("#pinnedElement")
.addTo(controller);
Замечания:
duration.overflow-x: scroll на контейнере.Для горизонтальной анимации важно правильно настроить HTML и CSS:
.container {
width: 3000px; /* ширина всего контента */
display: flex;
flex-direction: row; /* горизонтальный порядок элементов */
}
.section {
width: 100vw; /* каждый экран занимает всю ширину окна */
}
Рекомендации:
display: flex или grid для
горизонтального расположения секций.position: absolute
на всех элементах, кроме анимируемых.По умолчанию колесо мыши скроллит вертикально. Для горизонтальных эффектов можно перенаправить события:
window.addEventListener('wheel', function(e){
document.querySelector('.scroll-wrapper').scrollLeft += e.deltaY;
e.preventDefault();
}, { passive: false });
Особенности:
deltaY в scrollLeft.duration и triggerHook могут
требовать пересчёта при изменении ширины окна.vw) для ширины
секций позволяет сохранить пропорции на разных устройствах.controller.update(true) после ресайза:window.addEventListener('resize', function(){
controller.update(true);
});
Горизонтальная прокрутка в ScrollMagic открывает возможности для
динамичных интерфейсов, но требует внимательной настройки контроллера,
сцен, CSS-контейнеров и взаимодействия с пользователем. Правильное
сочетание x-анимаций, pin и параллакса создаёт
плавный и эффектный опыт прокрутки.