Framer Motion — это мощный фреймворк для создания анимаций в React-приложениях. Он предоставляет простые и гибкие инструменты для реализации сложных анимационных эффектов, а также помогает улучшить производительность приложений. Основная цель Framer Motion — упростить создание анимаций без необходимости в глубоких знаниях CSS или JavaScript. Его API основано на концепции «анимируемых компонентов», которые облегчают интеграцию анимации в структуру приложения.
Чтобы начать работу с Framer Motion, необходимо установить его через npm или yarn:
npm install framer-motion
Или с использованием yarn:
yarn add framer-motion
После этого библиотека становится доступной для использования в компоненте React. Для начала достаточно импортировать необходимое API:
import { motion } from 'framer-motion';
motion — это обёртка для стандартных компонентов React,
которая позволяет добавить анимацию к любому элементу.
Framer Motion использует специальную обёртку motion,
которая делает обычные компоненты React анимируемыми. Например, для
анимации простого div элемента достаточно обернуть его в
motion.div:
import { motion } from 'framer-motion';
function AnimatedComponent() {
return <motion.div animate={{ x: 100 }} />;
}
В этом примере элемент div будет двигаться по оси X на
100 пикселей.
Framer Motion предоставляет несколько свойств, которые управляют анимацией:
Пример:
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
transition={{ duration: 2 }}
>
Это анимируемый компонент.
</motion.div>
Framer Motion поддерживает различные типы анимаций, которые можно использовать в зависимости от потребностей проекта.
Для изменения позиции элемента используется свойство x
(горизонтальное смещение) и y (вертикальное смещение), а
также z (для 3D анимаций). Также доступны свойства для
работы с положением по осям, такие как top,
left, right, bottom.
Пример анимации смещения элемента:
<motion.div
initial={{ x: 0 }}
animate={{ x: 200 }}
transition={{ type: "spring", stiffness: 100 }}
>
Перемещающийся элемент
</motion.div>
Здесь используется пружинная анимация, которая даёт эффект отскока.
Framer Motion также поддерживает анимацию масштаба и вращения с
помощью свойств scale и rotate.
Пример анимации масштаба:
<motion.div
initial={{ scale: 0 }}
animate={{ scale: 1 }}
transition={{ duration: 0.5 }}
>
Масштабируемый элемент
</motion.div>
Пример анимации вращения:
<motion.div
initial={{ rotate: 0 }}
animate={{ rotate: 360 }}
transition={{ duration: 2 }}
>
Вращающийся элемент
</motion.div>
Анимация изменения прозрачности элемента выполняется через свойство
opacity. Это полезно для создания эффектов появления и
исчезновения элементов.
Пример анимации прозрачности:
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 1 }}
>
Элемент с изменением прозрачности
</motion.div>
Framer Motion поддерживает анимации, которые можно запускать в ответ на взаимодействие пользователя. Например, анимации при наведении курсора, клике или при изменении состояния.
Для создания анимации, активирующейся при наведении, используется
свойство whileHover:
<motion.div
whileHover={{ scale: 1.2 }}
transition={{ type: "spring", stiffness: 300 }}
>
Элемент увеличивается при наведении
</motion.div>
Для анимации, активирующейся по клику, используется свойство
whileTap:
<motion.button
whileTap={{ scale: 0.9 }}
transition={{ type: "spring", stiffness: 400 }}
>
Нажмите на меня
</motion.button>
Framer Motion предоставляет возможность использовать шаблоны для анимации. Это позволяет изменять стили элемента, не нарушая его текущие настройки.
Пример использования шаблона для анимации изменения размеров:
<motion.div
initial={{ width: "100px", height: "100px" }}
animate={{ width: "200px", height: "200px" }}
transition={{ type: "spring", stiffness: 100 }}
>
Анимируемый элемент
</motion.div>
Framer Motion поддерживает создание сложных анимационных
последовательностей. Для этого можно использовать свойство
variants, которое позволяет задавать разные состояния
компонента.
Пример использования вариантов анимаций:
const variants = {
hidden: { opacity: 0, x: -100 },
visible: { opacity: 1, x: 0 },
};
<motion.div
initial="hidden"
animate="visible"
variants={variants}
transition={{ duration: 0.5 }}
>
Элемент с последовательной анимацией
</motion.div>
Здесь используется два варианта анимации: один для начального состояния, другой — для конечного.
Framer Motion оптимизирован для работы с React, и при правильной настройке анимаций позволяет достичь высокой производительности. Одним из основных способов улучшения производительности является использование ключевых кадров и оптимизация состояния компонентов. Также фреймворк поддерживает анимации с использованием физической модели, что позволяет точно контролировать поведение анимаций и минимизировать нагрузку на браузер.
Framer Motion — это универсальный инструмент для создания анимаций в React-приложениях. Он предлагает мощные и гибкие возможности для работы с анимациями, упрощая процесс создания интерактивных элементов и улучшая пользовательский интерфейс. С его помощью можно легко создавать сложные анимационные эффекты, управлять ими с помощью простого API и оптимизировать производительность.