Работа с Lottie

Инициализация Lottie

В базовом варианте инициализация Lottie выглядит так:

let animation = lottie.loadAnimation({
  container: document.querySelector(el), // DOM элемент, на который будет повешен Lottie
  renderer: 'svg', // тип рендера ('svg' / 'canvas')
  loop: false, // зацикливание (true / false / number)
  autoplay: false, // автовоспроизведение (true / false)
  path: 'data.json' // путь до json, сгенерированного с помощью Bodymovin
})

Обратите внимание на опцию renderer. Здесь можно выбрать тип рендера: svg или canvas. Canvas будет более производительным на мобильных устройствах, однако он не поддерживает маски. Поскольку для нашей анимации требуется маска прозрачности, мы воспользуемся svg рендером.

Воспроизведение анимаций: метод playSegments

У Lottie есть множество интересных методов, но одним из самых мощных является метод playSegments(). Он позволяет проигрывать любое количество кадров нашей анимации, начиная и заканчивая любым кадром.

animation.playSegments([start, end], forceFlag)

Давайте рассмотрим его подробнее. Метод имеет два аргумента:

  1. массив из двух чисел, где 1-ое число - кадр, с которого нужно начать воспроизведение, 2-ое число - кадр, на котором нужно закончить;
  2. флаг, форсирующий воспроизведение отрезка (лучше всегда указывать true)

Ранее мы выделили 4 ключевых отрезка нашей анимации и спроектировали анимацию так, что каждый отрезок длится ровно одну секунду, и эта секунда соответствует 60-и кадрам. Таким образом, покадрово наша анимация выглядит так:

  1. появление бактерии - [0, 60]
  2. бактерия на виду - [60, 120]
  3. появление спирали - [120, 180]
  4. исчезновение спирали и бактерии - [180, 240]

Эти отрезки мы можем легко воспроизвести по отдельности с помощью метода playSegments():

animation.playSegments([0, 60], true) // появление бактерии
animation.playSegments([60, 120], true) // бактерия на виду
/* и т.д. */

На демо-странице за это отвечает нижний ряд кнопок в меню. Кнопка "Полностью [0, 240]" запускает анимацию целиком от начала до конца. Следующие 4 кнопки в ряду запускают выделенные нами отрезки анимации. Последняя кнопка запускает произвольный отрезок.

Воспроизведение в обратном направлении

Также мы с легкостью можем воспроизводить отрезки в обратном направлении, просто поменяв местами стартовую и конечную точки:

animation.playSegments([60, 0], true) // бактерия исчезнет

На демо-странице кадры инвертируются после нажатия на кнопку "Реверс" в верхнем ряду.

Изменение скорости: метод setSpeed

Другой полезный метод Lottie - setSpeed(speed). Как понятно из названия, он устанавливает скорость анимации, где speed - это коэффициент скорости (1 - нормальная скорость). Например, следующий код заставит бактерию появиться в 2 раза быстрее:

animation.setSpeed(2)
animation.playSegments([0, 60], true)

На демо-странице этот метод повешен на поле "Скорость".

Управление зацикливанием после инициализации

Зациклить анимацию можно не только при инициализации, но и в любое другое время, вызвав animation.loop = true. См. кнопку "Зацикливание".

Обходим баги IE и Safari: метод setLocationHref

При работе с IE и Safari в режиме svg рендера будет полезен метод setLocationHref(locationHref), который добавляет ко всем url'ам locationHref. Это позволяет обойти некоторые баги этих браузеров (например, такой). Метод не реализован на демо.

// SVG без setLocationHref()
<g mask="url(#maskName)"> ... </g>

// Добавили
animation.setLocationHref(https://example.com)

// SVG стало
<g mask="url(https://example.com#maskName)"> ... </g>

Про остальные методы можно почитать в официальной доке.


Экспорт анимаций с помощью Bodymovin | Содержание

results matching ""

    No results matching ""