GSAP (GreenSock Animation Platform) предоставляет мощные средства для анимации как одиночных элементов, так и больших наборов объектов. Работа с множественными элементами требует понимания методов, позволяющих управлять коллекциями DOM-узлов, применять анимации к каждой части группы и оптимизировать производительность.
GSAP поддерживает работу с массивами и коллекциями элементов. Для начала необходимо выбрать несколько объектов с помощью стандартных методов JavaScript или CSS-селекторов:
const boxes = document.querySelectorAll(".box");
gsap.to(boxes, { duration: 2, x: 100, rotation: 45 });
В этом примере анимация применена ко всем элементам с классом
.box. Каждый элемент получает одинаковые параметры, что
позволяет быстро запускать однородные анимации без ручного перебора.
Для придания разнообразия анимации можно использовать свойства
stagger. Этот параметр позволяет сдвигать начало анимации
между элементами по времени:
gsap.to(boxes, {
duration: 1.5,
y: 50,
rotation: 360,
stagger: 0.2
});
Ключевой момент: stagger может быть
задан числом, функцией или объектом с дополнительными параметрами.
Функция позволяет динамически изменять задержку в зависимости от индекса
элемента:
gsap.to(boxes, {
duration: 1,
x: 100,
stagger: (index, target, list) => index * 0.1
});
Для сложных последовательностей с множеством элементов GSAP
предоставляет объект Timeline. Он позволяет объединять
несколько анимаций в единую цепочку с управлением временем и
синхронизацией.
const tl = gsap.timeline({ defaults: { duration: 1 } });
tl.to(boxes, { y: 100, stagger: 0.2 })
.to(boxes, { rotation: 180, stagger: 0.1 }, "+=0.5")
.to(boxes, { scale: 1.5, stagger: { each: 0.15, from: "center" } });
Особенности Timeline:
tl.timeScale().reverse) и циклические анимации
(repeat).При работе с десятками и сотнями объектов критично учитывать производительность:
width, height, top,
left вызывают перерасчет макета. Предпочтительно
использовать transform и opacity.stagger вместо отдельных
анимаций: позволяет снизить нагрузку на браузер.translate3d, rotate3d и scale3d
используют графический процессор.GSAP позволяет задавать функции для свойств анимации, что полезно при работе с массивами элементов. Пример:
gsap.to(boxes, {
duration: 2,
x: (i) => i * 50,
y: (i, target) => Math.sin(i) * 20,
rotation: (i) => i * 15
});
Каждый элемент получает индивидуальные параметры, создавая органичную и разнообразную анимацию без ручного перебора.
Stagger поддерживает ключевые значения from:
"start" — от первого элемента."end" — от последнего элемента."center" — от центра коллекции."edges" — от краев к центру.Пример:
gsap.to(boxes, {
y: 50,
stagger: { each: 0.2, from: "center", grid: "auto" }
});
Использование параметра grid позволяет работать с
двумерными сетками элементов, обеспечивая комплексные визуальные
эффекты.
Для сложных сцен можно комбинировать разные типы анимации: смещения, повороты, масштаб, цвет. Timeline упрощает синхронизацию:
tl.to(boxes, { x: 100, duration: 1 })
.to(boxes, { rotation: 360, duration: 0.5 }, "-=0.25")
.to(boxes, { scale: 0.5, opacity: 0.7, stagger: 0.1 });
Секрет эффективности: накладывание анимаций с помощью смещения времени позволяет создавать плавные переходы и сложные последовательности без конфликтов.
GSAP позволяет анимировать элементы, добавленные после запуска скрипта:
const container = document.querySelector(".container");
function addBox() {
const box = document.createElement("div");
box.classList.add("box");
container.appendChild(box);
gsap.from(box, { opacity: 0, y: -50, duration: 1 });
}
При таком подходе анимации остаются согласованными, и новые элементы органично включаются в текущую сцену.
Эти подходы позволяют эффективно работать с большими наборами элементов, создавая плавные, отзывчивые и динамичные интерфейсы, минимизируя нагрузку на браузер и обеспечивая полный контроль над анимацией каждого объекта.