ScrollMagic — это библиотека для управления анимациями при прокрутке страницы. С течением времени она эволюционировала, и переход с более старых версий на актуальные версии требует понимания изменений в API, логике сцены и настройках контроллера.
В ранних версиях ScrollMagic контроллер создавался с минимальными параметрами:
var controller = new ScrollMagic.Controller();
В последних версиях добавлены расширенные опции:
window.true по умолчанию для
вертикальной).Пример:
var controller = new ScrollMagic.Controller({
container: "#scrollContainer",
vertical: true,
globalSceneOptions: { triggerHook: 0.5 }
});
Использование globalSceneOptions является основной
оптимизацией при переходе с предыдущих версий, где каждая сцена
требовала отдельного указания triggerHook,
duration и т.д.
Основной строительный блок ScrollMagic — это сцена
(ScrollMagic.Scene). В ранних версиях сцена создавалась
примерно так:
var scene = new ScrollMagic.Scene({
triggerElement: "#element",
duration: 200
})
.setPin("#element")
.addTo(controller);
В новых версиях изменился механизм событий и методов:
enter, leave, progress,
start, end).Пример современной сцены с Tween анимацией:
var tween = gsap.to("#element", { x: 300, rotation: 360, duration: 2 });
var scene = new ScrollMagic.Scene({
triggerElement: "#trigger",
duration: 400,
triggerHook: 0.25
})
.setTween(tween)
.addIndicators({ name: "Slide Animation" })
.addTo(controller);
Ключевые отличия от старых версий:
.on("start end progress"), теперь рекомендуется точное
указание событий.setPin()
остался, но теперь корректно работает с Flexbox и Grid макетами, чего не
было в старых версиях.setTween().В старых версиях triggerHook принимал строковые значения
("onEnter", "onCenter",
"onLeave"). В новых версиях предпочтительно использование
чисел от 0 до 1:
0 — верхняя граница контейнера.0.5 — центр контейнера.1 — нижняя граница.Это позволяет точно позиционировать момент запуска анимации.
var scene = new ScrollMagic.Scene({
triggerElement: "#element",
triggerHook: 0.75
});
Также изменилось поведение offset: в новых версиях
оно рассчитывается относительно текущего triggerHook, а не
от начала документа, что улучшает совместимость с динамическими
элементами.
Ранее ScrollMagic плохо справлялся с динамически добавляемыми
элементами. Теперь можно использовать метод refresh()
контроллера после изменения DOM:
controller.update(true);
controller.refresh();
Это обновляет позиции триггеров и высоты сцен без необходимости пересоздавать все сцены заново.
Современные версии ScrollMagic поддерживают ES-модули и import/export:
import ScrollMagic from 'scrollmagic';
import 'scrollmagic/scrollmagic/uncompressed/plugins/animation.gsap';
import 'scrollmagic/scrollmagic/uncompressed/plugins/debug.addIndicators';
Это особенно важно для проектов на Webpack или Vite, где подключение
глобальных скриптов через <script> становится
нежелательным.
on("enter"), on("leave").triggerHook и offset в
числовых значениях.setTween().controller.update() и
controller.refresh().Эти изменения позволяют не только сохранить совместимость с существующим кодом, но и использовать новые возможности ScrollMagic для более точного и производительного управления анимациями при прокрутке.