ScrollMagic позволяет создавать интерактивные анимации и контролировать их запуск в зависимости от положения скролла. Одной из наиболее мощных возможностей библиотеки является динамическое изменение триггеров, что обеспечивает адаптивность анимаций к различным условиям: изменениям размера окна, содержимого страницы или состояния элементов.
triggerElement и его динамическое управлениеКаждый Scene в ScrollMagic создается с определённым
триггерным элементом (triggerElement).
Этот элемент определяет, где именно начинается сцена относительно
скролла:
var scene = new ScrollMagic.Scene({
triggerElement: "#section1",
duration: 300
})
.setTween("#animate", {opacity: 1})
.addTo(controller);
По умолчанию triggerElement фиксирован, но ScrollMagic
позволяет его изменять в любое время с помощью метода
.triggerElement():
scene.triggerElement("#section2"); // смена триггера на другой элемент
Особенности динамической смены:
triggerHooktriggerHook определяет точку появления сцены на экране и
может принимать значения от 0 (верх страницы) до
1 (низ страницы):
var scene = new ScrollMagic.Scene({
triggerElement: "#section",
triggerHook: 0.5 // сцена активируется в середине экрана
});
Динамическое обновление
triggerHook:
scene.triggerHook(0.8); // сдвиг точки активации вниз
Это полезно для адаптивного дизайна, когда высота элементов или окна изменяется, и необходимо подстроить момент запуска анимации.
Длительность сцены (duration) определяет промежуток
скролла, на котором сцена активна. Она также может быть динамически
изменена:
scene.duration(500); // задаем новую длительность
Сочетание динамического triggerElement и
duration позволяет создавать сцены, которые адаптируются к
контенту, меняющемуся по высоте или добавляющемуся динамически через
AJAX.
Если содержимое страницы изменяется, позиция элементов, от которых
зависит триггер, может сдвинуться. Для корректной работы используется
метод .refresh():
scene.refresh();
window.resize:window.addEventListener('resize', () => {
scene.refresh();
});
enter и leaveИногда необходимо менять триггер в зависимости от прокрутки или других условий. ScrollMagic предоставляет события сцены:
scene.on("enter", function (event) {
if (someCondition) {
scene.triggerElement("#newSection");
scene.duration(400);
}
});
enter срабатывает, когда сцена входит в область
видимости.leave — когда сцена выходит из области
видимости.Часто возникает ситуация, когда несколько анимаций должны запускаться
по мере прокрутки разных блоков. ScrollMagic позволяет динамически
менять триггеры для каждой сцены или использовать один и тот же объект
Scene, перепривязывая его:
var sections = document.querySelectorAll(".section");
sections.forEach((section, index) => {
scene.triggerElement(section);
scene.duration(section.offsetHeight);
scene.refresh();
});
Это позволяет строить последовательные, плавные анимации, где каждая секция имеет уникальный триггер и длительность.
scene.refresh() после любых изменений DOM, особенно если
элементы загружаются асинхронно..triggerElement() и обновлять длительность.triggerHook для точной настройки момента
активации, особенно при адаптивной верстке.enter,
leave и динамическую смену триггеров, создавая
интерактивный скролл с изменяющимся поведением.Эти методы обеспечивают полный контроль над тем, где и когда сцена ScrollMagic срабатывает, и позволяют создавать динамически адаптирующиеся интерфейсы без потери производительности и плавности анимаций.