FLIP (First, Last, Invert, Play) — это методика анимации, которая позволяет создавать плавные и производительные переходы между состояниями элементов на веб-странице. Она особенно эффективна для работы с изменениями размеров, позиции и расположения элементов в DOM без резких “скачков” визуального представления.
First (Первое состояние) На этом этапе
необходимо зафиксировать начальные координаты и размеры элемента. Обычно
используются методы getBoundingClientRect() или
GSAP-помощники для сохранения этих значений. Это позволяет зафиксировать
исходную точку анимации.
const first = element.getBoundingClientRect();Last (Конечное состояние) После внесения изменений в DOM (например, изменение позиции или размера), фиксируется конечное состояние элемента. Это нужно для того, чтобы понимать, как именно элемент должен измениться.
// Применяем изменения
element.style.width = "200px";
const last = element.getBoundingClientRect();Invert (Инверсия) Разница между начальным и конечным состоянием вычисляется для создания обратного преобразования. Элемент визуально возвращается в первоначальное положение, но уже с новым стилем. Этот шаг обеспечивает эффект плавного перехода.
const invertX = first.left - last.left;
const invertY = first.top - last.top;
gsap.set(element, {
x: invertX,
y: invertY
});Play (Воспроизведение анимации) После инверсии применяется анимация к элементу, которая плавно переводит его в новое состояние. Именно на этом этапе создается ощущение естественного движения без резких скачков.
gsap.to(element, {
duration: 0.5,
x: 0,
y: 0,
ease: "power2.out"
});translate и scale, которые GPU
обрабатывает быстрее, чем изменения top, left
или width/height.Flip.getState() и Flip.from().Flip.getState(targets) Сохраняет
текущее состояние элементов.
const state = Flip.getState(".card");Flip.from(state, config) Выполняет
анимацию из сохраненного состояния до текущего состояния. Позволяет
управлять продолжительностью, кривой ускорения и другими параметрами
анимации.
Flip.from(state, {
duration: 0.6,
ease: "power1.inOut",
stagger: 0.1
});Flip.fit(element, container)
Автоматически масштабирует и перемещает элемент, чтобы он соответствовал
размеру и позиции контейнера, сохраняя плавность перехода.
width, height, top или
left напрямую.will-change или GPU layers.FLIP-анимации в GSAP обеспечивают сочетание контроля и
производительности, позволяя создавать визуально сложные
переходы с минимальными усилиями. Правильное использование методов
Flip.getState() и Flip.from() упрощает работу
с динамическим контентом и повышает UX интерфейсов.