Система анимации в Chart.js строится вокруг двух ключевых параметров:
duration и easing. Эти настройки
определяют поведение переходов при первичном рендеринге графика,
обновлении данных и изменении конфигурации. Анимация управляется через
блок options.animation, а также может быть переопределена
на уровне отдельных операций обновления.
Внутренне библиотека использует requestAnimationFrame и интерполяцию значений, что позволяет плавно изменять числовые параметры датасетов, шкал и элементов графика.
Параметр duration определяет длительность анимации в
миллисекундах. Он влияет на скорость всех переходов, включая появление
графика, изменение значений и перерасчёт элементов.
Базовая структура настройки:
const config = {
type: 'line',
data: {
labels: ['Янв', 'Фев', 'Мар', 'Апр'],
datasets: [{
label: 'Продажи',
data: [10, 20, 15, 30]
}]
},
options: {
animation: {
duration: 1000
}
}
};
0 полностью отключает анимациюВажная особенность заключается в том, что duration не
просто задаёт скорость отрисовки, а влияет на математическую
интерполяцию между начальным и конечным состоянием графика.
Параметр easing определяет характер изменения значений
во времени. Он отвечает за то, как именно происходит движение между
начальным и конечным состоянием.
Пример настройки:
options: {
animation: {
duration: 1200,
easing: 'easeOutQuart'
}
}
В Chart.js поддерживается набор предустановленных функций:
linear — равномерное изменение без ускоренийeaseInQuad — медленный старт с ускорениемeaseOutQuad — быстрое начало с замедлениемeaseInOutQuad — комбинация ускорения и замедленияeaseInCubic, easeOutCubic,
easeInOutCubic — более выраженные кривыеeaseInQuart, easeOutQuart,
easeInOutQuart — сильная плавность на концахeaseInSine, easeOutSine — мягкие
синусоидальные переходыeaseOutBounce — эффект «отскока»Каждая функция easing задаёт коэффициент интерполяции t,
где:
t = 0 — начало анимацииt = 1 — завершение анимацииФункция преобразует линейное время в нелинейное значение:
value = start + (end - start) * easing(t)
При этом:
Эти параметры работают совместно и определяют визуальное поведение графика.
animation: {
duration: 300,
easing: 'easeOutQuad'
}
Характеристика:
animation: {
duration: 2000,
easing: 'easeInOutCubic'
}
Характеристика:
animation: {
duration: 1500,
easing: 'easeOutBounce'
}
Характеристика:
Chart.js позволяет задавать параметры анимации не только глобально, но и при вызове обновления графика.
chart.update({
duration: 800,
easing: 'easeInOutQuad'
});
Это поведение важно при динамическом изменении данных, когда требуется различная скорость реакции интерфейса в разных сценариях.
В отдельных случаях параметры могут быть связаны с конкретным набором данных через общую систему анимационных ключей.
Пример влияния на элементы dataset:
options: {
animation: {
duration: 1200,
easing: 'easeOutCubic'
}
}
При этом каждый dataset интерполируется независимо, но в рамках общего тайминга.
Анимация распространяется не только на точки данных, но и на:
При изменении масштаба значений происходит пересчёт координат с использованием тех же параметров duration и easing.
easeOutQuartПодчеркивает плавность линий и переходов между точками.
easeOutCubicСоздаёт эффект «вырастания» столбцов.
easeInOutSineОбеспечивает равномерное раскрытие сегментов.
При чрезмерно высокой длительности анимации возникает перегрузка восприятия, особенно при частых обновлениях данных. В таких сценариях система начинает накапливать промежуточные состояния, что снижает отзывчивость интерфейса.
Использование сложных easing-функций увеличивает вычислительную нагрузку, так как интерполяция выполняется на каждом кадре анимационного цикла.
Полное отключение анимации:
options: {
animation: {
duration: 0
}
}
Такой режим применяется при:
В этом случае Chart.js сразу применяет конечное состояние без промежуточных шагов.