Функция stagger используется для создания
последовательных или каскадных анимаций элементов, позволяя управлять
интервалом начала каждой анимации, направлением и сложными паттернами
движения. В отличие от базовой анимации отдельных объектов,
stagger оптимизирует работу с множественными элементами,
создавая визуально сложные эффекты без необходимости вручную
рассчитывать временные задержки.
gsap.to(".box", {
x: 100,
duration: 1,
stagger: 0.2
});
В этом примере каждый элемент с классом .box начинает
движение с интервалом 0.2 секунды.
stagger1. amount Позволяет распределить
анимацию всех элементов равномерно в течение заданного времени:
gsap.to(".box", {
x: 100,
duration: 1,
stagger: {
amount: 2
}
});
Если есть 5 элементов, интервал между ними автоматически вычисляется
как 2 / (5 - 1) = 0.5 секунды.
2. from Определяет точку старта
каскада. Возможные значения: "start",
"center", "end", "edges",
"random".
gsap.to(".box", {
y: 50,
duration: 1,
stagger: {
each: 0.2,
from: "center"
}
});
В этом примере анимация начинается с центрального элемента и распространяется к краям.
3. each Указывает фиксированный
интервал между анимациями элементов.
gsap.to(".box", {
rotation: 360,
duration: 1,
stagger: {
each: 0.1
}
});
Каждый последующий элемент будет вращаться с задержкой в 0.1 секунды относительно предыдущего.
staggerGSAP позволяет создавать не только линейные последовательности, но и
сложные паттерны, комбинируя функции stagger с
callback-функциями.
1. Функция на основе индекса
Можно задавать задержку динамически для каждого элемента через функцию:
gsap.to(".box", {
x: 200,
duration: 1,
stagger: (index, target, array) => index * 0.3
});
index — порядковый номер элемента.target — DOM-элемент.array — массив всех анимируемых элементов.Такой подход позволяет создавать волнообразные эффекты или анимации с экспоненциальной задержкой.
2. Каскад с обратным порядком
Использование stagger с параметром
from: "end" позволяет анимации идти в обратном
направлении:
gsap.to(".box", {
y: -50,
duration: 1,
stagger: {
each: 0.15,
from: "end"
}
});
Элементы в конце массива стартуют первыми, создавая эффект “обратной волны”.
3. Анимации по кривой или шахматке
Функция stagger совместно с CSS Grid или
flex-контейнерами позволяет создавать сложные визуальные паттерны.
gsap.to(".grid-item", {
scale: 1.5,
duration: 1,
stagger: {
grid: [3, 3],
from: "center",
amount: 1
}
});
grid: [3, 3] — размер сетки, 3x3.amount распределяет общее время анимации по всем
элементам.stagger с timelineФункция stagger идеально интегрируется с
gsap.timeline(), что позволяет строить сложные сцены с
повторяющимися каскадами:
const tl = gsap.timeline();
tl.to(".box", { x: 100, duration: 1, stagger: 0.2 })
.to(".box", { y: 50, duration: 0.5, stagger: { each: 0.1, from: "end" } })
.to(".box", { rotation: 360, duration: 1, stagger: (i) => i * 0.15 });
В этом примере каждая анимация элементов имеет собственный паттерн, при этом последовательность полностью управляется timeline.
stagger1. stagger с функциями обратного
вызова
gsap.to(".box", {
x: 100,
duration: 1,
stagger: {
each: 0.2,
onStart: (index, target) => console.log(`Element ${index} started!`)
}
});
Позволяет выполнять дополнительные действия при старте каждой анимации, например запуск звуковых эффектов или динамическую смену стилей.
2. Комбинирование с easings
gsap.to(".box", {
y: 50,
duration: 1,
stagger: 0.2,
ease: "power2.inOut"
});
Каждый элемент получает индивидуальное сглаживание движения, создавая естественные каскадные эффекты.
amount, чтобы не перегружать рендеринг слишком большим
числом одновременных анимаций.stagger с
timeline для последовательного контроля событий.index позволяет
создавать уникальные индивидуальные движения для каждого элемента без
написания отдельных анимаций.Эти возможности делают stagger инструментом для
профессиональной работы с анимацией в GSAP, позволяя строить сложные
визуальные эффекты с минимальным количеством кода и максимальной
гибкостью.