gsap.context() является важным инструментом для
управления анимациями в GSAP, особенно когда речь идет о динамических
интерфейсах, компонентах фреймворков или повторном использовании
анимаций. Он позволяет изолировать анимации и управлять их жизненным
циклом, что особенно полезно при интеграции с React, Vue или другими
современными библиотеками.
gsap.context()gsap.context() создаёт контекст анимаций, который
позволяет:
Синтаксис базового использования:
let ctx = gsap.context(() => {
gsap.to(".box", { x: 200, duration: 1 });
}, container);
Пояснения:
() => { ... } — функция, в которой создаются все
анимации для данного контекста.container — DOM-узел, относительно которого будут
выполняться селекторы (.box будет искаться внутри
container).ctx используется для управления и
очистки анимаций.Контекст позволяет автоматически уничтожать все анимации и таймеры, связанные с контейнером:
ctx.revert();
Метод revert() отменяет все анимации, созданные внутри
контекста, и возвращает элементы в исходное состояние. Это критически
важно при работе с компонентами, которые часто монтируются и
размонтируются, чтобы избежать утечек памяти и “висящих” анимаций.
Внутри контекста GSAP предоставляет возможность использовать
локальные селекторы с помощью ctx.selector():
let ctx = gsap.context((self) => {
let boxes = self.selector(".box");
gsap.to(boxes, { x: 100, duration: 1 });
}, container);
self.selector(selector) выполняет поиск внутри
контейнера, привязанного к контексту.import { useEffect, useRef } from "react";
import gsap from "gsap";
function AnimatedComponent() {
const containerRef = useRef();
useEffect(() => {
const ctx = gsap.context(() => {
gsap.to(".box", { x: 200, duration: 1 });
}, containerRef);
return () => ctx.revert();
}, []);
return (
<div ref={containerRef}>
<div className="box">Box</div>
</div>
);
}
Ключевые моменты:
useEffect для безопасного доступа
к DOM.ctx.revert() вызывается при размонтировании компонента,
что предотвращает зависание анимаций..box) работают внутри
containerRef, не влияя на другие элементы страницы.GSAP поддерживает вложенные контексты, что позволяет создавать сложные структуры анимаций:
let ctx1 = gsap.context(() => {
gsap.to(".outer", { x: 100, duration: 1 });
let ctx2 = gsap.context(() => {
gsap.to(".inner", { y: 50, duration: 0.5 });
});
}, container);
ctx2 полностью независим от ctx1.gsap.timeline() внутри контекста автоматически
привязываются к контейнеру.let ctx = gsap.context(() => {
gsap.timeline({
scrollTrigger: {
trigger: ".box",
start: "top center",
}
})
.to(".box", { x: 300, duration: 2 });
}, container);
ctx.revert() в методах очистки, чтобы
избежать накопления анимаций.gsap.context() превращает управление анимациями из
хаотичного процесса в структурированную систему, где каждая анимация
живёт в своём изолированном пространстве и может быть безопасно создана
и уничтожена без побочных эффектов.