Lottie Animations : локальное подключение и воспроизведение по HOVER

Lottie — библиотека позволяющая воспроизводить анимацию сформированную в JSON файле.

Для детального ознакомления перейдите на официальный сайт Lottie.

Подключение анимации из сообщества или из персональной библиотеки Lottie — проблем не вызовет, но если вы задаётесь вопросом, как подключить Lottie локально, то тут не всё очевидно.

Как подключить

Для подключения на страницу нужно пройти через два шага:

1 — Подключить скрипт для воспроизведения
<script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.7.1/lottie.min.js"></script>
Вариант с локальным подключением скрипта
<script src="./js/lottie.min.js"></script>
2 — Подключить файл с заранее подготовленной анимацией

Для этого создайте блок куда будет вставлена ваша анимация — div, где в качестве ID укажите произвольное название (это нужно чтобы потом найти на странице этот блок). Также рекомендую сразу создать класс со стилем для этого блока, к примеру с названием containerAnimation.

<div id="animation-container" class="containerAnimation"></div>

Как использовать

Далее нужно написать несколько строк на Java Script.

<script>
var animationContainer = document.getElementById('animation-container');
var animation = bodymovin.loadAnimation({
    container: animationContainer,
    path: './anim_json/animation.json',
    renderer: 'svg',
    loop: false,
    autoplay: false
});
</script>

Расскажу детально, что происходит в этом коде.

Определяем переменную animationContainer к которой привязываем найденый элемент при помощи метода getElementById.

var animationContainer = document.getElementById('animation-container');

Далее определяем ещё одну переменную animation (для хранения опций воспроизведения) к которой привязываем функционал подключенной ранее библиотеки.

var animation = bodymovin.loadAnimation({...})

Теперь про опции:

  • container — опция для связи с контейнером (div), где будет анимация
  • path — путь к файлу с анимацией
  • renderer — формат для рендеринга анимации
  • loop — опция, где можно указать проигрывать по кругу (true) или проигрываеть один раз (false)
  • autoplay — автопроигрывание при запуске. true — да, false — нет

Как запустить по HOVER

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

Найти нужный объект

Определяем переменную animationContainer_hover и привязываем к ней наш элемент, за которым хотим следить.

var animationContainer_hover = document.getElementById('animation-container-hover');
Курсор над объектом — запускаем анимацию
animationContainer_hover.addEventListener('mouseenter', function() {
  animation.play();
});
Курсор не на объекте — останавливаем анимацию
animationContainer_hover.addEventListener('mouseleave', function() {
  animation.stop();
});
Блок полностью
<script>
var animationContainer_hover = document.getElementById('animation-container-hover');

animationContainer_hover.addEventListener('mouseenter', function() {
  animation.play();
});

animationContainer_hover.addEventListener('mouseleave', function() {
  animation.stop();
});
</script>

Демо-страница

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Lottie Animation</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.7.1/lottie.min.js"></script>
    <style>
        .containerAnimation {
            width: 178px;
            height: 178px;
        }

    </style>
</head>
<body>
    <div id="animation-container-hover">
        <div id="animation-container" class="containerAnimation"></div>
    </div>

    <script>
        var animationContainer = document.getElementById('animation-container');

        var animationContainer_hover = document.getElementById('animation-container-hover');
        
        var animation = bodymovin.loadAnimation({
            container: animationContainer,
            path: './anim_json/animation.json',
            renderer: 'svg',
            loop: false,
            autoplay: false
        });

        animationContainer_hover.addEventListener('mouseenter', function() {
            animation.play();
        });
        animationContainer_hover.addEventListener('mouseleave', function() {
            animation.stop();
        });
    </script>
</body>
</html>