В ScrollMagic ключевым понятием является сцена
(Scene), которая связывает анимацию или действие с положением скролла на
странице. Автовоспроизведение контента при входе элемента в область
видимости реализуется через привязку анимации к событию
enter сцены.
var controller = new ScrollMagic.Controller();
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger", // элемент, при достижении которого запускается действие
triggerHook: 0.8 // точка срабатывания (от верхнего края окна)
})
.on("enter", function () {
// действие, которое выполняется при входе элемента в сцену
document.querySelector("#box").classList.add("active");
})
.addTo(controller);
Здесь ключевые моменты:
triggerElement — элемент DOM, при пересечении которого
срабатывает событие.triggerHook — положение на экране, где происходит
триггер (0 — верх окна, 1 — низ).enter активируется один раз при
пересечении точки триггера снизу вверх.Часто ScrollMagic используют вместе с библиотекой
GSAP для анимаций. Автовоспроизведение при входе в
сцену выполняется с помощью привязки таймлайна к событию
enter:
var tween = gsap.to("#box", {duration: 1, x: 300, opacity: 1});
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
triggerHook: 0.9,
reverse: false // отключение возврата анимации при скролле вверх
})
.setTween(tween)
.addTo(controller);
Параметр reverse: false гарантирует, что анимация
сработает только один раз при входе в сцену, что
идеально для автовоспроизведения видео или элементов с анимацией.
Для воспроизведения видеоконтента достаточно в обработчике события
enter вызвать метод play():
var video = document.querySelector("#videoElement");
var scene = new ScrollMagic.Scene({
triggerElement: "#videoTrigger",
triggerHook: 0.75,
reverse: false
})
.on("enter", function () {
video.play();
})
.addTo(controller);
Если видео должно останавливаться при выходе из сцены, можно
использовать событие leave:
scene.on("leave", function () {
video.pause();
});
Иногда требуется, чтобы элемент оставался закреплённым на экране и
воспроизводился по мере прокрутки. Для этого применяют метод
.setPin():
var scene = new ScrollMagic.Scene({
triggerElement: "#pinTrigger",
duration: 500
})
.setPin("#pinnedElement")
.on("enter", function () {
document.querySelector("#pinnedElement").classList.add("play");
})
.addTo(controller);
Здесь duration определяет время фиксации
элемента на экране в пикселях. Автовоспроизведение или запуск
анимации может происходить как при входе, так и постепенно в процессе
скролла.
Для элементов, которые должны воспроизводиться каждый раз при появлении на экране, используется комбинация параметров:
var scene = new ScrollMagic.Scene({
triggerElement: "#repeatTrigger",
triggerHook: 0.8,
reverse: true // анимация может повторяться при скролле вверх
})
.on("enter", function () {
var element = document.querySelector("#repeatElement");
element.classList.add("active");
})
.on("leave", function () {
document.querySelector("#repeatElement").classList.remove("active");
})
.addTo(controller);
reverse: true — анимация сбрасывается при выходе из
сцены.leave позволяет возвратить
элемент в исходное состояние, чтобы при следующем входе
воспроизведение происходило снова.enter, чтобы скролл оставался плавным.reverse: false для
автовоспроизведения медиа и однократных анимаций.Используя эти подходы, ScrollMagic позволяет гибко управлять автовоспроизведением контента при попадании элемента в область видимости, обеспечивая как однократные, так и повторяющиеся эффекты.