Как использовать анимацию Lottie в React JS?

Наверняка вы видели на веб-страницах некоторые элементы в формате GIF, которые привлекают много внимания своим движением и дизайном, и вам интересно: что это за элементы? и как я могу использовать их на своей веб-странице? Что ж, это именно то, чему вы научитесь, но с помощью React JS.

Что такое анимации Лотти?

Lottie — это библиотека, созданная Airbnb для облегчения создания анимации для разных платформ.

Файл Lottie состоит из файла JSON. Это означает, что если вы знаете этот тип файла, вы можете изменить как его внешний вид, так и его переменные (хотя существуют также приложения, которые позволяют вам изменять их более простым способом).

Файлы Lottie работают на любом устройстве и могут масштабироваться без потери качества, как и файлы SVG.

Разница между GIF и Лотти.

Большая разница между анимированными GIF-файлами и файлами Lottie заключается в том, что GIF-файлы состоят из изображений, а файлы Lottie генерируются с помощью кода в файле JSON , что позволяет полностью настраивать их.

С точки зрения времени загрузки файлы Lottie намного быстрее, чем большинство файлов GIF, и имеют меньший вес, чем файлы GIF.

Сайты, на которых можно скачать файлы Lottie.

Создание проекта.

Назовем проект: lottie-app(по желанию, вы можете назвать его как угодно).

npm init vite@latest

Мы создаем проект с помощью Vite JS и выбираем React с TypeScript.

Затем мы запускаем следующую команду, чтобы перейти к только что созданному каталогу.

cd lottie-app

Затем устанавливаем зависимости.

npm install

Затем открываем проект в редакторе кода (в нашем случае VS code).

code .

Установка зависимости для использования Lottie с React JS.

Чтобы использовать файлы Lottie в реакции, для этой задачи есть несколько библиотек, в этом случае мы будем использовать @lottiefiles/react-lottie-player.

Затем в терминале (мы должны находиться в проекте lottie-app ) мы выполняем следующую команду, чтобы установить зависимость для использования файлов Lottie.

npm install @lottiefiles/react-lottie-player

Первые шаги.

Внутри папки src/App.tsx удаляем все содержимое файла и размещаем функциональный компонент, отображающий заголовок.

export const App = () => {
  return (
    <div className='container'>
      <h1>Using Lottie with React JS ⚛️</h1>
    </div>
  )
}
export default App

Это должно выглядеть примерно так 👀:

Заголовок

Используем Лотти.

Теперь нам нужен специальный компонент для отображения нашей Лотти. Компонент называется Player, и мы получаем его из следующего пакета.

import { Player } from '@lottiefiles/react-lottie-player';

Время использовать его!

import { Player } from '@lottiefiles/react-lottie-player';

const App = () => {
  return (
    <div className='container'>
      <h1>Using Lottie with React JS ⚛️</h1>

      <Player/>

    </div>
  )
}

export default App

Компоненту Player требуется обязательное свойство — src . Который получает string.

И где мы возьмем src?

Это свойство может быть расположено на какой-либо странице, где вы можете скачать файлы Lottie. (в данном случае мы будем использовать страницу LottieFiles ).

1- Сначала мы авторизуемся или создаем учетную запись на LottieFiles .

2- Ищем Лотти и выбираем ее.

3. Наиболее вероятно, что под Lottie вы увидите несколько параметров, и одним из них будет URL-адрес анимации Lottie , и этот URL-адрес будет тем, который мы поместим в свойство src компонента Player .

Вы должны указать ширину и высоту этого компонента Player . Вы можете использовать свойство стиля, которое предлагает компонент; в данном случае я делаю это через className и стили CSS.
import { Player } from '@lottiefiles/react-lottie-player';

const App = () => {
  return (
    <div className='container'>
      <h1>Using Lottie with React JS ⚛️</h1>

      <Player
        src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
        className="player"
      />

    </div>
  )
}

export default App

Это должно выглядеть так 👀:

Страница

Вы заметите, что лотерея не выполняет никаких движений в виде анимации, потому что некоторые свойства, которые мы должны настроить, отсутствуют.

  • autoplay : позволяет лотерее запускаться автоматически, как только она будет готова (принимает логические значения).
  • цикл : позволяет анимации повторяться автоматически (принимает логические значения).
<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
  loop
  autoplay
/>

Теперь это должно выглядеть так 👀:

Страница

Обычно это все, что вам нужно для использования лоттии в вашем приложении, но давайте посмотрим, какие еще свойства предлагает этот компонент.

Другие конфигурации для Лотти.

В дополнение к свойствам, которые мы видели ранее, компонент Player имеет и другие интересные свойства, такие как:

Скорость.

Свойство, получающее числовое значение, которое управляет скоростью анимации и по умолчанию имеет значение 1 .

<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
  loop
  autoplay
  speed={10}
/>

Фон.

Свойство, которое получает строковое значение и обрабатывает цвет фона лотереи.

<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
  loop
  autoplay
  background='red'
/>

Направление.

Свойство, которое получает числовое значение (1 или -1) и определяет, в каком направлении должна выполняться анимация (начиная с начала до конца или начиная с конца к началу). По умолчанию его значение равно 1.

<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
  loop
  autoplay
  direction={-1}
/>

Стиль.

Свойство, которое получает объект (как встроенный стиль в JSX) и обрабатывает стиль контейнера Lottie.

<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
  loop
  autoplay
  style={{ height: '300px', width: '300px' }}
/>

onEvent.

Это свойство получает функцию, которая позволяет получать в качестве параметра PlayerEvent .

По сути, эта функция прослушивает несколько событий:

  • load : Когда данные анимации загружены.
  • ошибка : когда источник анимации не может быть проанализирован, не загружен или имеет ошибки форматирования.
  • Ready : Когда данные анимации загружены и проигрыватель готов.
  • play : когда анимация начинает воспроизводиться.
  • пауза : когда анимация приостановлена.
  • стоп : Когда анимация остановлена.
  • замораживание : когда анимация останавливается, потому что игрок становится невидимым.
  • цикл : Когда цикл анимации завершен.
  • Complete : Когда анимация завершена.
  • кадр : Когда вставляется новый кадр.
const handleEventPlayer (e:PlayerEvent) => {
  if (event === 'load') alert('Lottie Load!')
}

<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
  loop
  autoplay
  onEvent={handleEventPlayer}
/>

Получаем ссылку.

Получение ссылки на компонент Player аналогично тому, как мы это делаем с компонентом JSX. Нам нужно только использовать свойство ref и в сочетании с хуком useRef у нас уже будет то, что нам нужно.

const playerRef = useRef<Player>(null);

<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
  loop
  autoplay
  ref={playerRef}
/>

И зачем нам нужно получить ссылку на компонент Player?

Ну а для получения ссылки необходимо будет выполнить несколько методов, которые нам предлагает компонент. Что мы и увидим дальше.

Выполнение методов Player.

Внутри текущего свойства ссылки playerRef у нас будет доступ к нескольким методам, например:

  • play : запускает воспроизведение анимации.
  • пауза : приостановить анимацию.
  • стоп : Останавливает анимацию.
Ни один из вышеперечисленных методов не требует каких-либо параметров и ничего не возвращает.
playerRef.current.play();

playerRef.current.pause();

playerRef.current.stop();

У нас также есть некоторые функции установки для установки определенных значений Player .

  • setPlayerSpeed : устанавливает скорость анимации, получает только числовые значения.
  • s* etLoop *: устанавливает, должна ли анимация запускаться более одного раза автоматически, получает только логические значения.
  • setSeeker : устанавливает определенный кадр, получает только числовые значения или процентные строки.
playerRef.current.setPlayerSpeed(5);

playerRef.current.setLoop(true);

playerRef.current.setSeeker('50%');

Добавление элементов управления.

Помимо компонента Player , существует еще один компонент, называемый Controls , и для его использования его необходимо вложить в компонент Player следующим образом:

<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
>
  <Controls/>
</Player>

Этот компонент получает несколько параметров, но мы упомянем лишь некоторые из них, например:

  • видимый . Свойство, позволяющее сделать видимым или скрытым блок управления. Он принимает только логические значения.
  • темная тема . Свойство, позволяющее изменить внешний вид блока управления на темную тему. Принимает только логические значения.
  • кнопки . Свойство, позволяющее отображать кнопки, которые могут иметь блок управления. Он принимает только массив строк с некоторыми из следующих значений:
  • играть
  • повторить
  • останавливаться
  • рамка
  • снимок
  • фон
<Player
  src='https://assets1.lottiefiles.com/packages/lf20_myejiggj.json'
  className="player"
>
  <Controls
    visible={true}
    darkTheme={true}
    buttons={['play', 'repeat', 'frame', 'stop']}
  />
</Player>

Конфигурация приложения Lottie

Вывод.

Файлы Lottie — лучший вариант для украшения вашего веб-сайта и оживления его с помощью этих анимаций. Это все более используемый элемент в веб-дизайне.

🚨 Но, тем не менее, вы должны контролировать количество размещаемой анимации, вы не хотите перегружать свой сайт и замедлять его работу.

🚨 А еще вам следует быть осторожным с тем, откуда вы загружаете эти файлы, потому что помните, что они основаны на коде! Поэтому вам следует искать жизнеспособные источники .