Библиотека MUI предоставляет набор компонентов для реализации анимаций и переходов, упрощающих создание динамичного и отзывчивого интерфейса. Основные компоненты переходов — это Fade, Grow, Slide и Zoom. Они позволяют управлять визуальной подачей элементов, плавно отображая или скрывая их при изменении состояния.
Fade реализует плавное появление и исчезновение элемента с изменением прозрачности. Используется, когда требуется мягкий переход без смещения объекта.
Пример использования:
import Fade from '@mui/material/Fade';
import Button from '@mui/material/Button';
import React, { useState } from 'react';
function FadeExample() {
const [show, setShow] = useState(false);
return (
<>
<Button onCl ick={() => setShow(!show)}>Toggle Fade</Button>
<Fade in={show} timeout={500}>
<div style={{ width: 100, height: 100, backgroundColor: 'blue' }} />
</Fade>
</>
);
}
Ключевые моменты:
in — определяет, активен ли переход. true
— элемент видим, false — скрыт.timeout — длительность анимации в миллисекундах.style можно использовать для установки начальных стилей
элемента.Особенности Fade:
Grow увеличивает элемент с нулевого размера до его реального размера, создавая эффект «вырастания». Подходит для появления контента с плавной трансформацией масштаба.
Пример использования:
import Grow from '@mui/material/Grow';
import Button from '@mui/material/Button';
import React, { useState } from 'react';
function GrowExample() {
const [checked, setChecked] = useState(false);
return (
<>
<Button onCl ick={() => setChecked(!checked)}>Toggle Grow</Button>
<Grow in={checked} timeout={600}>
<div style={{ width: 150, height: 150, backgroundColor: 'green' }} />
</Grow>
</>
);
}
Ключевые моменты:
timeout управляет скоростью анимации.transformOrigin, чтобы задавать
точку начала увеличения:<Grow in={checked} style={{ transformOrigin: 'top left' }}>
Особенности Grow:
TransitionGroup можно создавать
последовательные анимации появления элементов.Slide сдвигает элемент с указанного направления, создавая эффект движения на экране. Этот переход полезен для панелей, меню и уведомлений.
Пример использования:
import Slide from '@mui/material/Slide';
import Button from '@mui/material/Button';
import React, { useState } from 'react';
function SlideExample() {
const [checked, setChecked] = useState(false);
return (
<>
<Button onCl ick={() => setChecked(!checked)}>Toggle Slide</Button>
<Slide direction="up" in={checked} timeout={400}>
<div style={{ width: 200, height: 50, backgroundColor: 'red' }} />
</Slide>
</>
);
}
Ключевые моменты:
direction — направление появления: "up",
"down", "left", "right".in управляет видимостью.timeout регулирует скорость сдвига.Особенности Slide:
transform: translate(...).Zoom увеличивает элемент от центра, создавая эффект «приближения». Отличается от Grow тем, что элемент появляется сразу с нулевой непрозрачностью и масштабируется, сохраняя свою позицию.
Пример использования:
import Zoom from '@mui/material/Zoom';
import Button from '@mui/material/Button';
import React, { useState } from 'react';
function ZoomExample() {
const [checked, setChecked] = useState(false);
return (
<>
<Button onCl ick={() => setChecked(!checked)}>Toggle Zoom</Button>
<Zoom in={checked} timeout={500}>
<div style={{ width: 120, height: 120, backgroundColor: 'purple' }} />
</Zoom>
</>
);
}
Ключевые моменты:
in определяет видимость элемента.timeout — время анимации.style={{ transformOrigin: 'bottom right' }} для управления
точкой масштабирования.Особенности Zoom:
timeout в
диапазоне 300–600 мс для естественного ощущения движения.TransitionGroup из
react-transition-group, чтобы управлять последовательностью
анимаций.Эти компоненты позволяют создавать интерфейсы с ощущением живости и интерактивности, не прибегая к сложной CSS-анимации. Правильное использование Fade, Grow, Slide и Zoom делает пользовательский интерфейс более отзывчивым и приятным для восприятия.