Анимации CSS с ключевыми кадрами в React
Динамически применяйте и удаляйте анимации @keyframes в зависимости от состояния компонента и событий.
«Анимации CSS с ключевыми кадрами в React» — бесплатный урок React Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения React Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс React Academy содержит 4 уроков всего.
Определение @keyframes
Правило @keyframes описывает многоэтапную анимацию, задавая значения свойств в точках временной шкалы с помощью from/to или процентов, например 0%, 50%, 100%.
В отличие от переходов, ключевые кадры могут описывать сложное многоэтапное движение, которое выполняется самостоятельно и не требует изменения состояния на каждом шаге.
Сокращённая запись анимации
Набор ключевых кадров применяется с помощью свойства animation: animation: slideIn 400ms ease forwards. В нём объединены имя, длительность, функция времени и режим заполнения.
Режим заполнения forwards сохраняет для элемента значения последнего ключевого кадра после завершения анимации, предотвращая возврат к начальному состоянию.
Применение класса анимации через состояние
В React обычно добавляют класс, содержащий объявление animation, когда состояние становится истинным. Например, добавление класса is-entering запускает ключевые кадры в момент монтирования элемента или переключения флага.
Так логика анимации остаётся в CSS, а React лишь определяет, когда присоединить класс.
Режим заполнения анимации
animation-fill-mode определяет, какие стили применяются до и после выполнения анимации. forwards сохраняет последний ключевой кадр, backwards применяет первый ключевой кадр во время задержки, а both делает и то, и другое.
Без forwards элемент, анимируемый до состояния плавного появления, после завершения анимации снова стал бы невидимым.
Чередование направления анимации
animation-direction: alternate воспроизводит анимацию вперёд, а затем назад при каждой итерации. В сочетании с animation-iteration-count: infinite это создаёт плавное движение туда-обратно, напоминающее пульсацию или дыхание.
Такой эффект удобен для индикаторов загрузки или ненавязчивого привлечения внимания движением.
Приостановка с помощью состояния воспроизведения анимации
animation-play-state может иметь значение running или paused. Управлять им можно из состояния React: например, при наведении курсора поставить бегущую строку на паузу, сменив класс.
Поскольку анимация приостанавливается, а не сбрасывается, после возобновления она продолжается ровно с того места, на котором остановилась.
Повторный запуск при изменении свойства key
Кадровая анимация воспроизводится только один раз, когда её класс применяют впервые; повторное добавление того же класса не запускает её заново. Самый простой приём в React — изменить значение key, чтобы React смонтировал новый узел и воспроизвёл анимацию с начала.
Например, key={count} у уведомления повторно монтирует его при каждом увеличении count.
Учет настройки уменьшенного движения
Некоторые пользователи включают уменьшение движения в своей OS для комфорта или доступности. Оберните необязательные анимации в @media (prefers-reduced-motion: reduce) и отключите или сократите их внутри этого блока.
Учет этой настройки делает интерфейс более инклюзивным и помогает избежать дискомфорта.
Запуск при прокрутке с помощью IntersectionObserver
Чтобы анимировать элементы при их появлении в области просмотра, используйте IntersectionObserver в useEffect. Когда наблюдаемый элемент становится видимым, установите состояние — это добавит класс анимации.
Так можно создавать эффекты появления при прокрутке без ресурсоёмких обработчиков прокрутки, работающих на каждом кадре.
Управление последовательностью с помощью animation-delay
animation-delay задаёт задержку начала каждой кадровой анимации, создавая между ними интервалы. Если для списка элементов задать постепенно увеличивающиеся задержки, они будут анимироваться последовательно, создавая срежиссированный эффект появления.
В React задержку для каждого элемента можно вычислить с помощью style={{ animationDelay: i * 80 + 'ms' }}.
Кадровые анимации и переходы
Используйте переходы для простых изменений между двумя состояниями, вызванных взаимодействием с пользователем, а кадровые анимации — когда нужны движения из нескольких этапов, зацикливание или анимация, не зависящая от переключения состояния.
И то и другое реализуется средствами CSS, поэтому React лишь определяет, когда добавлять классы, а браузер обрабатывает кадры.
Быстрая проверка
Проверьте, насколько хорошо Вы понимаете поведение кадровых анимаций.
Итоги
Вы научились определять @keyframes, применять их с помощью сокращённой записи animation, управлять режимом заполнения и направлением, приостанавливать и повторно запускать анимации, а также показывать элементы при прокрутке с помощью IntersectionObserver.
Вы также узнали, как учитывать настройку prefers-reduced-motion для создания доступной анимации.
Часто задаваемые вопросы
Урок «Анимации CSS с ключевыми кадрами в React» бесплатный?
Да — полный текст урока «Анимации CSS с ключевыми кадрами в React» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс React Academy, подпишись на CoddyKit PRO. Курс React Academy содержит 4 уроков всего.
Чему я научусь в уроке «Анимации CSS с ключевыми кадрами в React»?
Динамически применяйте и удаляйте анимации @keyframes в зависимости от состояния компонента и событий. Ты практикуешь React Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать React Academy?
Предыдущий опыт не требуется. React Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Анимации CSS с ключевыми кадрами в React»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке React Academy?
Да. Каждый урок React Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Переходы CSS при изменении состояния React
- Анимации CSS с ключевыми кадрами в React
- useLayoutEffect для измерений перед анимацией
- Анимации появления и исчезновения без библиотеки