Анимация SVG (масштабируемая векторная графика) придает веб-интерфейсам жизнь и интерактивность, делая их визуально привлекательными. В этой статье мы рассмотрим различные методы создания SVG-анимации с использованием библиотеки Framer Motion в React. Framer Motion предоставляет мощный набор инструментов для простого создания плавной и выразительной анимации. Мы рассмотрим различные методы и предоставим примеры кода для демонстрации каждого подхода.
Содержание:
-
Базовая SVG-анимация
-
Анимация ключевых кадров
-
Анимация пути
-
Морфинг анимации
-
Преобразование анимации
-
Интерактивная анимация
-
Анимация на основе прокрутки
-
Базовая SVG-анимация.
Для начала давайте рассмотрим базовую SVG-анимацию с использованием Framer Motion. Вот пример анимации свойства непрозрачности элемента SVG:
import { motion } from 'framer-motion';
const BasicSvgAnimation = () => {
return (
<svg>
<motion.circle
cx="50"
cy="50"
r="25"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 1 }}
/>
</svg>
);
};
- Анимация ключевых кадров.
Framer Motion позволяет нам определять ключевые кадры для более сложной анимации. Вот пример анимации положения элемента SVG с помощью ключевых кадров:
import { motion } from 'framer-motion';
const KeyframesSvgAnimation = () => {
return (
<svg>
<motion.circle
cx="50"
cy="50"
r="25"
animate={{
x: [0, 100, 0],
y: [0, 50, 0],
}}
transition={{ duration: 2, repeat: Infinity }}
/>
</svg>
);
};
- Анимация пути:
Анимация пути элемента SVG может создать завораживающие эффекты. Вот пример анимации пути элемента SVG<path>с помощью Framer Motion:
import { motion } from 'framer-motion';
const PathAnimation = () => {
return (
<svg>
<motion.path
d="M100,100 L200,100 L150,200 Z"
initial={{ pathLength: 0 }}
animate={{ pathLength: 1 }}
transition={{ duration: 2 }}
/>
</svg>
);
};
- Морфинг анимации:
Framer Motion позволяет нам плавно трансформироваться между различными формами SVG. Вот пример анимации морфинга круга и квадрата:
import { motion } from 'framer-motion';
const MorphingAnimation = () => {
return (
<svg>
<motion.morphSvg
from="circle"
to="rect"
cx="50"
cy="50"
r="25"
width="50"
height="50"
/>
</svg>
);
};
- Преобразование анимации:
элементы SVG можно трансформировать различными способами. Framer Motion обеспечивает простые в использовании преобразования для анимации SVG. Вот пример анимации вращения элемента SVG:
import { motion } from 'framer-motion';
const TransformAnimation = () => {
return (
<svg>
<motion.rect
width="100"
height="100"
initial={{ rotate: 0 }}
animate={{ rotate: 360 }}
transition={{ duration: 2, repeat: Infinity }}
/>
</svg>
);
};
- Интерактивная анимация.
Framer Motion позволяет создавать интерактивную SVG-анимацию, реагируя на действия пользователя. Вот пример анимации элемента SVG при наведении курсора мыши:
import { motion } from 'framer-motion';
const InteractiveAnimation = () => {
return (
<svg>
<motion.circle
cx="50"
cy="50"
r="25"
whileHover={{ scale: 1.2 }}
whileTap={{ rotate: 180 }}
/>
</svg>
);
};
- Анимация на основе прокрутки.
Framer Motion также поддерживает анимацию на основе прокрутки, при которой элементы SVG анимируются в зависимости от положения прокрутки. Вот пример анимации элемента SVG при прокрутке:
import { motion, useViewportScroll } from 'framer-motion';
const ScrollAnimation = () => {
const { scrollYProgress } = useViewportScroll();
return (
<svg>
<motion.circle
cx="50"
cy="50"
r="25"
style={{
y: scrollYProgress.interpolate([0, 1], [0, 100]),
position: 'fixed',
}}
/>
</svg>
);
};
В этой статье мы рассмотрели различные методы создания SVG-анимации с использованием Framer Motion в React. Мы рассмотрели базовую анимацию SVG, анимацию ключевых кадров, анимацию пути, анимацию морфинга, анимацию преобразования, интерактивную анимацию и анимацию на основе прокрутки. Используя возможности Framer Motion, мы можем создавать потрясающие и динамичные SVG-анимации, которые повышают удобство использования наших веб-приложений.
Реализуя эти методы, вы сможете вывести SVG-анимацию на новый уровень и создать уникальные и привлекательные пользовательские интерфейсы в своих проектах React.
Не забывайте экспериментировать, сочетать разные техники и раскрыть свой творческий потенциал! Приятной анимации!