ScrollMagic — это библиотека для управления анимациями при прокрутке страницы. Она позволяет создавать сложные интерактивные эффекты, в том числе адаптивное отображение изображений. Основной принцип работы заключается в сценах (Scenes) и контроллерах (Controllers). Контроллер отслеживает прокрутку страницы, а сцена определяет поведение элементов в конкретном диапазоне прокрутки.
Адаптивные изображения в контексте ScrollMagic часто используются для создания параллакса, изменения размеров, трансформации и подгрузки разных форматов в зависимости от ширины экрана.
Для начала необходимо создать контроллер:
var controller = new ScrollMagic.Controller();
Контроллер может быть вертикальным или
горизонтальным, что задается через опцию
vertical: true|false. По умолчанию прокрутка
вертикальная.
var controller = new ScrollMagic.Controller({
vertical: true
});
Контроллер управляет всеми сценами на странице и позволяет синхронизировать анимации с прокруткой.
Сцена привязывается к элементу и задает диапазон прокрутки, в котором происходят изменения:
var scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: 500,
triggerHook: 0.5
})
.setTween("#image", {scale: 1.5})
.addTo(controller);
Пояснения параметров:
triggerElement — элемент, при попадании в область
видимости которого сцена запускается.duration — длина прокрутки, на протяжении которой
анимация активна.triggerHook — положение триггера на экране (0 — верх
экрана, 1 — низ экрана)..setTween — подключение анимации, чаще всего через
библиотеку GSAP.Для адаптивных изображений это позволяет масштабировать изображение в зависимости от прокрутки.
Адаптивные изображения требуют разных стилей и анимаций для различных устройств. ScrollMagic совместим с медиазапросами:
if(window.matchMedia("(max-width: 768px)").matches){
var scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: 300
})
.setTween("#image", {scale: 1.2})
.addTo(controller);
} else {
var scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: 500
})
.setTween("#image", {scale: 1.5})
.addTo(controller);
}
Ключевой момент: анимации должны быть адаптированы под размеры экрана, иначе элементы будут выходить за пределы блока или выглядеть неестественно.
Параллакс создается с помощью смещения элементов при прокрутке. Для изображения это может быть сдвиг по вертикали или горизонтали:
var parallaxScene = new ScrollMagic.Scene({
triggerElement: "#parallax-section",
triggerHook: 1,
duration: "200%"
})
.setTween("#parallax-image", {y: "50%", ease: Linear.easeNone})
.addTo(controller);
duration: "200%" — означает, что анимация растянута на
2 экрана по высоте.y: "50%" — изображение смещается на 50% своей
высоты.Linear.easeNone — движение без ускорения, чтобы эффект
был плавным.Для оптимизации адаптивных изображений важно использовать разные форматы:
<picture>
<source media="(max-width: 768px)" srcset="image-small.jpg">
<source media="(max-width: 1200px)" srcset="image-medium.jpg">
<img src="image-large.jpg" alt="Example">
</picture>
При прокрутке ScrollMagic можно управлять классами или анимациями для
<picture>:
var responsiveScene = new ScrollMagic.Scene({
triggerElement: "#responsive-image",
duration: 400
})
.on("enter", function () {
document.querySelector("#responsive-image img").classList.add("active");
})
.on("leave", function () {
document.querySelector("#responsive-image img").classList.remove("active");
})
.addTo(controller);
Суть: при попадании элемента в область видимости можно динамически менять стиль, активировать анимацию или подгружать другой вариант изображения.
ScrollMagic хорошо работает с GSAP (GreenSock Animation Platform) для плавной анимации изображений:
var tween = gsap.to("#image", {scale: 1.5, rotation: 15, duration: 1});
var scene = new ScrollMagic.Scene({
triggerElement: "#image-section",
duration: 500
})
.setTween(tween)
.addTo(controller);
Можно комбинировать масштаб, поворот, прозрачность и позицию, создавая сложные адаптивные эффекты, которые зависят от прокрутки и устройства.
Адаптивные изображения при прокрутке могут нагружать страницу. Для оптимизации:
loading="lazy"
для <img>.will-change для
GPU-ускорения анимаций.#image {
will-change: transform, opacity;
}
triggerHook и duration для
плавной синхронизации анимации с прокруткой.<picture> и
lazy-loading для экономии трафика.will-change и уменьшение объема анимаций.Эти методы позволяют создавать динамические, адаптивные и отзывчивые изображения, которые изменяются в зависимости от прокрутки, экрана и взаимодействия пользователя.