Масштабирование графиков в Chart.js реализуется не встроенными средствами ядра, а через дополнительный плагин — chartjs-plugin-zoom. Он добавляет поддержку интерактивного зума и панорамирования, включая управление колесом мыши.
Базовая интеграция выглядит следующим образом:
import { Chart } from 'chart.js';
import zoomPlugin from 'chartjs-plugin-zoom';
Chart.register(zoomPlugin);
При использовании CDN:
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-zoom"></script>
После регистрации плагина появляется доступ к секции
options.plugins.zoom, где и настраивается поведение
масштабирования.
Основная настройка, отвечающая за работу колесика:
options: {
plugins: {
zoom: {
zoom: {
wheel: {
enabled: true
}
}
}
}
}
Ключевой параметр:
После активации график начинает изменять масштаб по оси, над которой находится курсор.
Zoom может работать по-разному в зависимости от режима:
zoom: {
wheel: {
enabled: true
},
mode: 'x'
}
Основные режимы:
Режим определяет, как интерпретируется жест прокрутки. В
аналитических графиках чаще используется x, поскольку
временные ряды требуют детального приближения по горизонтали.
Параметр speed управляет тем, насколько быстро меняется
масштаб при прокрутке:
zoom: {
wheel: {
enabled: true,
speed: 0.1
}
}
Значения:
Высокая чувствительность делает график менее предсказуемым, особенно при тонкой работе с данными.
Чтобы избежать чрезмерного увеличения или уменьшения, используются лимиты:
zoom: {
wheel: {
enabled: true
},
limits: {
x: { min: 'original', max: 'original' },
y: { min: 'original', max: 'original' }
}
}
Варианты ограничений:
Контроль диапазона важен при работе с финансовыми и научными графиками, где выход за пределы искажает восприятие данных.
Колесо мыши часто используется совместно с перетаскиванием:
zoom: {
wheel: {
enabled: true
},
pan: {
enabled: true,
mode: 'x'
},
mode: 'x'
}
Поведение:
Такой подход имитирует поведение профессиональных аналитических инструментов.
По умолчанию масштабирование происходит относительно положения
курсора. Это поведение можно контролировать через
focus:
zoom: {
wheel: {
enabled: true
},
zoom: {
focus: 'center'
}
}
Доступные значения:
Режим mouse обеспечивает более точное взаимодействие,
так как пользователь «приближает» конкретную точку данных.
При работе с временными рядами часто требуется запретить масштабирование по Y:
zoom: {
wheel: {
enabled: true
},
mode: 'x'
}
Такой подход:
При интенсивной работе колесо мыши может вызывать слишком частые перерисовки. Для сглаживания применяется throttle:
zoom: {
wheel: {
enabled: true,
speed: 0.1
},
threshold: 10
}
Поведение прокрутки можно изменить логически:
zoom: {
wheel: {
enabled: true,
invert: false
}
}
Возможные варианты:
Инверсия используется для согласования поведения с другими интерфейсными компонентами.
При активном zoom важно иметь возможность вернуть исходное состояние:
chart.resetZoom();
Дополнительно можно ограничить сброс только по осям:
chart.resetZoom({ x: true, y: false });
Это позволяет сохранять частичный фокус анализа.
Zoom через колесо мыши ведёт себя по-разному в зависимости от типа диаграммы:
Особое внимание требуется при работе с дискретными данными, где чрезмерный zoom приводит к визуальной перегрузке.
Интенсивное использование колесика мыши приводит к частым пересчётам:
Оптимизация достигается через:
options: {
animation: false
}
decimation для больших массивовZoom через колесо может конфликтовать с:
При необходимости приоритет события регулируется через
eventOptions:
zoom: {
wheel: {
enabled: true,
modifierKey: 'ctrl'
}
}
В этом случае масштабирование происходит только при удержании клавиши, снижая конфликт с hover-интерактивностью.
Добавление модификатора повышает контроль над интерфейсом:
Пример:
zoom: {
wheel: {
enabled: true,
modifierKey: 'ctrl'
}
}
Такое поведение особенно полезно в веб-приложениях с прокручиваемыми контейнерами.