GSAP (GreenSock Animation Platform) предоставляет высокопроизводительные средства для анимации свойств элементов в DOM, включая сложные трансформации layout. Анимация layout подразумевает плавное изменение позиции, размеров, отступов и других пространственных свойств элементов на странице, что особенно важно для динамических интерфейсов.
Позиция элемента определяется его свойствами CSS
top, left, right,
bottom и трансформациями x, y.
GSAP рекомендует использовать x и y для
анимации позиции, так как это обеспечивает аппаратное ускорение и
уменьшает нагрузку на перерисовку браузера:
gsap.to(".box", {
x: 200,
y: 100,
duration: 1.5,
ease: "power2.out"
});
x и y изменяют позицию относительно
исходного местоположения через CSS
transform: translate().ease задаёт кривую ускорения, делая движение более
естественным.Отличие от left и top:
прямое изменение этих свойств вызывает перерасчёт layout
(reflow), что может быть дорогостоящим при сложных
интерфейсах.
Для изменения размеров элементов (width,
height) применяется GSAP напрямую через свойства
объекта:
gsap.to(".panel", {
width: "400px",
height: "200px",
duration: 1,
ease: "power1.inOut"
});
Особенности анимации размеров:
width и height может
вызвать перерасчёт layout, поэтому для сложных интерфейсов часто
используется масштабирование (scaleX,
scaleY):gsap.to(".panel", {
scaleX: 1.5,
scaleY: 1.2,
duration: 1,
transformOrigin: "top left"
});
transformOrigin определяет точку, относительно
которой происходит масштабирование. Это позволяет создавать эффект
расширения или сжатия элемента без смещения других компонентов.GSAP позволяет анимировать внутренние и внешние отступы, что важно при динамическом изменении layout:
gsap.to(".item", {
marginTop: "50px",
paddingLeft: "20px",
duration: 1.2,
ease: "power2.inOut"
});
x и y
для плавности.stagger, чтобы
анимация элементов происходила последовательно:gsap.to(".item", {
y: 50,
duration: 0.8,
stagger: 0.2,
ease: "power2.out"
});
flip для сложных изменений layoutGSAP предоставляет модуль Flip для анимации
изменений позиции элементов при перестройке DOM. Это
особенно полезно при сортировке списков или динамическом изменении
сетки:
import { Flip } from "gsap/Flip";
gsap.registerPlugin(Flip);
const state = Flip.getState(".card");
document.querySelector(".container").appendChild(document.querySelector(".card:last-child"));
Flip.from(state, {
duration: 1,
ease: "power1.inOut",
absolute: true
});
Принцип работы:
Flip.getState()).Преимущества метода Flip:
Для сложных изменений layout используется gsap.timeline,
позволяющий координировать несколько анимаций:
const tl = gsap.timeline({ defaults: { duration: 1, ease: "power2.out" } });
tl.to(".box1", { x: 100 })
.to(".box2", { x: 200 }, "<0.5") // старт через 0.5 секунды после предыдущей анимации
.to(".box3", { y: 50 }, "-=0.3"); // частичное наложение анимаций
"<0.5",
"-=0.3") задают смещение начала анимации
относительно предыдущей, что упрощает управление сложными
переходами.Изменения layout в flex и grid часто требуют анимации позиции
и порядка элементов, так как прямое изменение
left/top не применяется:
gsap.utils.toArray(".grid-item").forEach((el, i) => {
gsap.to(el, {
x: i * 120,
y: Math.floor(i / 3) * 120,
duration: 0.8,
ease: "power2.inOut"
});
});
x и y.Flip идеально подходит для анимации перестановки
элементов в grid.Для плавной анимации layout важно:
x, y, scaleX,
scaleY вместо прямого изменения left,
top, width, height.stagger для последовательного движения,
снижая нагрузку на браузер.Flip при динамических изменениях DOM для
автоматического расчёта трансформаций.