Библиотека anime.js предоставляет мощный и гибкий инструмент для создания динамических анимаций на веб-страницах. В контексте визуализации данных она позволяет плавно анимировать графики, диаграммы, карты и любые другие элементы, делая информацию более наглядной и интерактивной.
Для работы с anime.js достаточно подключить её через CDN или npm:
<script src="https://cdn.jsdelivr.net/npm/animejs@3.2.1/lib/anime.min.js"></script>
Или через npm:
npm install animejs
Базовый синтаксис анимации строится вокруг функции
anime(), которая принимает объект с параметрами:
anime({
targets: '.bar',
translateY: -100,
duration: 1000,
easing: 'easeInOutQuad'
});
linear, easeInOutQuad,
spring.Для динамического отображения столбчатой диаграммы можно анимировать высоту столбцов:
const bars = document.querySelectorAll('.bar');
bars.forEach((bar, index) => {
anime({
targets: bar,
height: () => bar.dataset.value + 'px',
delay: index * 100,
duration: 800,
easing: 'easeOutExpo'
});
});
dataset.value содержит числовое значение,
соответствующее высоте столбца.height позволяет динамически
получать конечное значение.delay обеспечивает последовательное появление столбцов,
создавая эффект «пошагового роста».Для визуализации долей используется атрибут
stroke-dasharray SVG-элементов:
const slices = document.querySelectorAll('.slice circle');
slices.forEach(slice => {
const radius = slice.r.baseVal.value;
const circumference = 2 * Math.PI * radius;
slice.style.strokeDasharray = circumference;
slice.style.strokeDashoffset = circumference;
anime({
targets: slice,
strokeDashoffset: [circumference, circumference * (1 - slice.dataset.value / 100)],
duration: 1200,
easing: 'easeOutCubic'
});
});
strokeDashoffset контролирует видимую часть окружности,
что позволяет создавать эффект заполнения.easeOutCubic.Для линейных графиков используется техника «рисования линий», основанная на SVG:
const path = document.querySelector('.line-graph path');
const length = path.getTotalLength();
path.style.strokeDasharray = length;
path.style.strokeDashoffset = length;
anime({
targets: path,
strokeDashoffset: 0,
duration: 1500,
easing: 'easeInOutSine'
});
strokeDasharray и
strokeDashoffset позволяют анимировать путь линии, создавая
эффект постепенного появления графика.Anime.js поддерживает массивные анимации через timeline,
что позволяет координировать несколько объектов одновременно:
const timeline = anime.timeline({
easing: 'easeOutExpo',
duration: 800
});
timeline
.add({
targets: '.bar',
height: el => el.dataset.value + 'px',
delay: anime.stagger(100)
})
.add({
targets: '.line-graph path',
strokeDashoffset: [anime.setDashoffset, 0],
offset: '-=500'
});
anime.timeline() создаёт последовательность
анимаций.anime.stagger() используется для постепенного появления
нескольких элементов.offset позволяет перекрывать анимации и
создавать сложные визуальные эффекты.Anime.js легко интегрируется с событиями, например, при наведении мыши или изменении данных:
document.querySelectorAll('.bar').forEach(bar => {
bar.addEventListener('mouseenter', () => {
anime({
targets: bar,
scale: 1.1,
duration: 300,
easing: 'easeOutBack'
});
});
bar.addEventListener('mouseleave', () => {
anime({
targets: bar,
scale: 1,
duration: 300,
easing: 'easeOutBack'
});
});
});
scale создаёт эффект увеличения,
подчеркивая активный элемент.targets вместо постоянного вычисления внутри анимации.Anime.js предоставляет гибкие возможности для визуализации данных: плавное появление диаграмм, рисование графиков, динамическое обновление элементов и интеграцию с событиями пользователя. Благодаря простому синтаксису, поддержке таймлайнов и стэгеров, библиотека позволяет создавать информативные и привлекательные анимации, повышающие восприятие информации.