Ответ
FLIP — техника анимации, оптимизирующая производительность за счёт расчёта изменений заранее. Аббревиатура расшифровывается:
- First — запоминаем начальное состояние (например,
getBoundingClientRect()
) - Last — фиксируем конечное состояние после изменений (например, после добавления класса)
- Invert — вычисляем разницу и применяем transform для имитации исходного положения
- Play — запускаем анимацию к конечному состоянию
Пример:
// Запоминаем начальную позицию
const first = element.getBoundingClientRect();
// Применяем изменения (например, добавляем класс)
element.classList.add('animate');
// Получаем конечную позицию
const last = element.getBoundingClientRect();
// Вычисляем разницу
const deltaX = first.left - last.left;
const deltaY = first.top - last.top;
// Инвертируем через transform
element.style.transform = `translate(${deltaX}px, ${deltaY}px)`;
// Запускаем анимацию
requestAnimationFrame(() => {
element.style.transition = 'transform 0.5s ease';
element.style.transform = '';
});
Преимущества: работает на GPU (transform/opacity), избегает дорогих вычислений в процессе анимации.