GSAP (GreenSock Animation Platform) предоставляет мощный инструмент для анимации веб-элементов. Одной из ключевых возможностей библиотеки является Batch, предназначенный для оптимизации работы с большим количеством элементов, которые анимируются схожим образом. Batch позволяет обрабатывать элементы группами, снижая нагрузку на рендеринг и повышая производительность.
Метод gsap.utils.toArray() часто используется для
получения коллекции элементов, но при прямой анимации каждого элемента
создается отдельная задача в рендере браузера, что при сотнях или
тысячах объектов снижает производительность. Batch решает эту проблему,
объединяя элементы в пакеты и применяя к ним общие
свойства анимации.
gsap.utils.toArray(".box").forEach(box => {
gsap.to(box, {x: 100, duration: 1});
});
В этом примере создается отдельная анимация для каждого элемента. При использовании Batch можно объединять элементы в группы и запускать их анимацию пакетами, что существенно экономит ресурсы.
Метод gsap.utils.batch() принимает следующие
параметры:
gsap.utils.batch(targets, {interval: 0.1, batchMax: 10, onEnter, onLeave, onEnterBack, onLeaveBack});
gsap.utils.batch(".item", {
interval: 0.2,
batchMax: 5,
onEnter: batch => gsap.to(batch, {opacity: 1, y: 0, stagger: 0.1, duration: 0.6}),
onLeave: batch => gsap.to(batch, {opacity: 0, y: 50, duration: 0.6})
});
gsap.utils.batch(".circle", {
interval: 0.05,
batchMax: 20,
onEnter: batch => {
batch.forEach(el => {
gsap.fromTo(el, {scale: 0}, {scale: 1, duration: 0.3});
});
}
});
Использование batchMax Большие
пакеты могут снизить отзывчивость, маленькие – создать лишние
рендер-процессы. Оптимальное значение подбирается опытным путем, обычно
5–20 элементов.
Интервалы анимации (interval)
Позволяет разбить поток элементов на группы, которые анимируются с
задержкой. Чем меньше интервал, тем быстрее все элементы обрабатываются,
но выше нагрузка.
Сочетание с stagger Даже внутри
пакета отдельные элементы можно анимировать с задержкой, создавая эффект
каскада.
Batch и scrollTrigger GSAP Batch отлично интегрируется с ScrollTrigger. Можно анимировать элементы при прокрутке страницы, минимизируя количество одновременно активных анимаций.
gsap.utils.batch(".section", {
onEnter: batch => gsap.to(batch, {opacity: 1, y: 0, stagger: 0.2}),
onLeave: batch => gsap.to(batch, {opacity: 0, y: -50})
});
interval, batchMax и функции обратного
вызова.stagger.Batch является мощным инструментом для оптимизации анимаций и управления большим количеством DOM-элементов, сочетая производительность с гибкостью управления визуальными эффектами.