Библиотека ScrollMagic предназначена для управления анимацией и триггерами при скролле страницы. При работе с видео оверлеями она позволяет создавать динамические эффекты наложения, синхронизацию с воспроизведением видео и интерактивные переходы.
Для начала необходимо создать контроллер ScrollMagic:
var controller = new ScrollMagic.Controller();
Далее формируется сцена, которая будет отслеживать позицию скролла относительно видео:
var scene = new ScrollMagic.Scene({
triggerElement: "#video-section", // Элемент, где начинается эффект
duration: 500, // Длительность эффекта в пикселях прокрутки
triggerHook: 0.5 // Положение триггера на экране (0 — верх, 1 — низ)
});
Ключевой момент: duration определяет,
насколько долго оверлей будет взаимодействовать с видео при прокрутке.
Без этого параметра эффект будет однократным.
Оверлей создается как обычный HTML-элемент:
<div id="video-overlay"></div>
CSS для оверлея:
#video-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,0.5); /* Полупрозрачный эффект */
pointer-events: none; /* Чтобы клики проходили на видео */
opacity: 0;
}
ScrollMagic тесно интегрируется с GSAP для анимации. Пример плавного появления оверлея:
var overlayTween = gsap.to("#video-overlay", {opacity: 1, duration: 1});
scene.setTween(overlayTween);
scene.addTo(controller);
Важно: использование gsap.to
обеспечивает плавную анимацию. Можно комбинировать fromTo
для сложных эффектов, например, изменения цвета или масштаба
оверлея.
Для интерактивного контроля видео по скроллу применяются события ScrollMagic:
scene.on("progress", function(event) {
var video = document.querySelector("#myVideo");
video.currentTime = video.duration * event.progress;
});
Здесь event.progress возвращает значение от 0 до 1,
соответствующее позиции скролла в сцене. Это позволяет синхронизировать
оверлей и видео, создавая эффект “скролл-таймлайна”.
Для сложных проектов можно использовать несколько оверлеев с разными сценами:
var overlays = document.querySelectorAll(".video-overlay");
overlays.forEach(function(overlay, index) {
var tween = gsap.fromTo(overlay, {opacity: 0}, {opacity: 1, duration: 1});
var scene = new ScrollMagic.Scene({
triggerElement: overlay,
duration: 300,
triggerHook: 0.7
}).setTween(tween).addTo(controller);
});
Такой подход позволяет создавать каскадные эффекты: один оверлей появляется, другой — затемняет или изменяет цвет, создавая динамическую визуальную последовательность.
Анимацию можно реализовать не только через GSAP, но и через добавление/удаление классов CSS:
scene.on("enter", function () {
document.querySelector("#video-overlay").classList.add("active");
});
scene.on("leave", function () {
document.querySelector("#video-overlay").classList.remove("active");
});
CSS-анимации могут включать трансформации, фильтры, градиенты, что позволяет добиться разнообразных визуальных эффектов без нагрузки на JS.
Если на странице несколько видео, необходимо создавать отдельные сцены и контроллеры либо делить один контроллер на несколько сцен:
var videos = document.querySelectorAll("video");
videos.forEach(function(video, index) {
var overlay = video.nextElementSibling;
var tween = gsap.to(overlay, {opacity: 1, duration: 1});
var scene = new ScrollMagic.Scene({
triggerElement: video,
duration: video.clientHeight,
triggerHook: 0.5
}).setTween(tween).addTo(controller);
scene.on("progress", function(e){
video.currentTime = video.duration * e.progress;
});
});
Такой подход обеспечивает полную интерактивность: каждый оверлей реагирует на прокрутку конкретного видео, а пользователь видит плавное наложение и синхронизацию.
will-change: opacity для оверлеев, чтобы
браузер оптимизировал рендер.duration сцен,
чтобы не перегружать вычисления прогресса.requestAnimationFrame при сложных
вычислениях синхронизации видео с прокруткой, если GSAP не покрывает все
нужды.Эти принципы позволяют создавать сложные интерактивные интерфейсы с видео и оверлеями, обеспечивая плавность и высокую визуальную выразительность при прокрутке страницы.