Плагин zoom предоставляет интерактивные возможности масштабирования и панорамирования для графиков, построенных на Chart.js. Он расширяет стандартный функционал библиотеки, добавляя поддержку управления областью просмотра через колесо мыши, жесты, перетаскивание и программные вызовы.
Основная ценность плагина заключается в переходе от статической визуализации данных к интерактивной аналитике, где пользователь может исследовать отдельные участки графика без изменения исходного набора данных.
Плагин распространяется как отдельный модуль и подключается после основной библиотеки Chart.js.
npm install chartjs-plugin-zoom
import { Chart } from 'chart.js';
import zoomPlugin from 'chartjs-plugin-zoom';
Chart.register(zoomPlugin);
При использовании CDN-версий порядок подключения критичен: сначала Chart.js, затем плагин.
Плагин интегрируется в жизненный цикл графика Chart.js через систему плагинов, перехватывая:
Каждое взаимодействие изменяет параметры диапазона осей
(min, max) без модификации исходных
данных.
Основная конфигурация задаётся в секции
options.plugins.zoom.
const config = {
type: 'line',
data: {
labels: [...],
datasets: [...]
},
options: {
plugins: {
zoom: {
pan: {
enabled: true,
mode: 'x'
},
zoom: {
wheel: {
enabled: true
},
pinch: {
enabled: true
},
mode: 'x'
}
}
}
}
};
x — масштабирование по оси Xy — масштабирование по оси Yxy — обе оси одновременноzoom: {
wheel: {
enabled: true,
speed: 0.1
}
}
speed регулирует интенсивность масштабированияИспользуются на сенсорных устройствах:
zoom: {
pinch: {
enabled: true
}
}
Панорамирование позволяет смещать область просмотра без изменения масштаба.
pan: {
enabled: true,
mode: 'x',
threshold: 10
}
threshold — минимальное смещение для активацииmode — направление движенияПлагин предоставляет API для управления состоянием zoom из кода.
chart.resetZoom();
chart.zoom(1.5);
chart.pan({
x: 50,
y: 0
});
Для предотвращения выхода за допустимые пределы используются ограничения:
zoom: {
limits: {
x: {
min: 'original',
max: 'original'
}
}
}
original — исходный диапазон данныхПлагин работает со всеми типами шкал Chart.js:
Особенности:
При наличии нескольких осей конфигурация задаётся отдельно для каждой:
zoom: {
zoom: {
x: { enabled: true },
y: { enabled: false }
}
}
или через общий режим:
mode: 'xy'
Плагин предоставляет возможность реагировать на изменения масштаба.
zoom: {
onZoom: ({ chart }) => {
console.log('zoom изменён');
},
onZoomComplete: ({ chart }) => {
console.log('zoom завершён');
}
}
Аналогично для панорамирования:
pan: {
onPan: ({ chart }) => {},
onPanComplete: ({ chart }) => {}
}
Часто zoom/pan дополняется внешними кнопками управления.
document.getElementById('reset').addEventListener('click', () => {
chart.resetZoom();
});
document.getElementById('zoomIn').addEventListener('click', () => {
chart.zoom(1.2);
});
При больших наборах данных важно учитывать:
Рекомендации:
При изменении размеров контейнера поведение zoom может требовать синхронизации:
Плагин совместим с большинством расширений:
Однако при комбинировании важно учитывать порядок регистрации плагинов, так как события canvas могут перехватываться несколькими слоями обработки.