Работа с программной активацией hover-состояния в Chart.js строится вокруг управления активными элементами графика, взаимодействием с тултипом и внутренним механизмом обработки событий. В отличие от DOM-ориентированных библиотек, Chart.js не хранит hover как отдельное визуальное состояние в стиле CSS. Вместо этого используется модель активных элементов (active elements), которая определяет, какие точки, сегменты или элементы считаются «под курсором».
Hover в Chart.js определяется через массив активных элементов, каждый из которых описывается парой:
datasetIndex — индекс набора данныхindex — индекс элемента внутри набораЭта структура используется как для реального наведения мыши, так и для программного управления состоянием.
Активные элементы хранятся внутри экземпляра графика и синхронизируются с:
Основной механизм активации — метод:
chart.setActiveElements([
{ datasetIndex: 0, index: 2 }
]);
chart.update();
После вызова происходит перерасчёт состояния графика, и указанный элемент становится визуально выделенным, как при реальном наведении курсора.
Множественная активация:
chart.setActiveElements([
{ datasetIndex: 0, index: 1 },
{ datasetIndex: 0, index: 3 }
]);
chart.update();
Такой режим используется для сценариев сравнения точек или группового выделения.
Hover в Chart.js тесно связан с тултипом. Программная активация элементов не всегда автоматически отображает tooltip, поэтому требуется отдельное управление.
Типовой паттерн:
chart.setActiveElements([
{ datasetIndex: 1, index: 4 }
]);
chart.tooltip.setActiveElements([
{ datasetIndex: 1, index: 4 }
]);
chart.update();
В некоторых конфигурациях достаточно только
setActiveElements, но при кастомных tooltip (особенно
external tooltip) синхронизация выполняется вручную.
Поведение hover определяется настройкой interaction:
options: {
interaction: {
mode: 'nearest',
intersect: true
}
}
Программная активация обходит часть этих правил, но влияет на то, как Chart.js интерпретирует активные элементы при следующем событии мыши.
Основные режимы:
nearest — ближайший элемент к позицииindex — все элементы одного индексаdataset — весь набор данныхpoint — конкретные точкиПрограммный hover фактически задаёт результат работы этих режимов вручную.
Для снятия активации используется установка пустого массива:
chart.setActiveElements([]);
chart.tooltip.setActiveElements([]);
chart.update();
Это возвращает график в исходное состояние без подсветки.
Chart.js предоставляет доступ к событиям, которые можно использовать для синхронизации программного hover с пользовательским вводом:
options: {
onHover: (event, elements, chart) => {
chart.canvas.style.cursor = elements.length ? 'pointer' : 'default';
}
}
Однако программное управление чаще применяется вне событий, например:
Иногда требуется не просто активировать элемент, а имитировать реальное поведение hover. Это включает:
Пример комплексного подхода:
function activatePoint(chart, datasetIndex, index) {
const active = [{ datasetIndex, index }];
chart.setActiveElements(active);
chart.tooltip.setActiveElements(active);
chart.update();
}
Такой метод часто используется при внешних контроллерах (например, списках или таблицах), синхронизированных с графиком.
Для line и scatter hover работает на уровне
точек. При программной активации:
Ключевые параметры:
pointHoverRadiuspointHoverBackgroundColorpointHoverBorderWidthПрограммное управление не меняет эти параметры напрямую, но активирует их визуальное применение.
В bar charts hover применяется к прямоугольникам. При активации:
Параметры:
backgroundColorhoverBackgroundColorborderColorhoverBorderColorПрограммная активация делает бар «активным», как при наведении мыши.
В круговых диаграммах hover связан с сегментами. Дополнительно используется параметр:
hoverOffsetПример поведения:
Программная активация:
chart.setActiveElements([
{ datasetIndex: 0, index: 2 }
]);
chart.update();
Программный hover часто используется для координации нескольких экземпляров Chart.js.
Пример логики:
function syncHover(sourceChart, targetChart, index) {
const active = [{ datasetIndex: 0, index }];
targetChart.setActiveElements(active);
targetChart.tooltip.setActiveElements(active);
targetChart.update('none');
}
Ключевой момент — использование режима обновления
'none', чтобы избежать анимационных задержек.
Программная активация hover особенно эффективна при интеграции с UI-элементами:
При выборе элемента интерфейса вызывается соответствующий индекс графика, что обеспечивает визуальную синхронизацию без мыши.
Механизм hover в Chart.js зависит от нескольких внутренних структур:
_active — текущие активные элементыtooltip._active — активные элементы тултипаinteraction — правила выбора элементовНесоответствие между ними может приводить к рассинхронизации отображения, особенно при ручном управлении.
Поэтому при программной активации часто требуется обновлять сразу оба слоя: график и tooltip.
При вызове update() после setActiveElements
запускается анимационный цикл. Hover-состояние включается не мгновенно,
а через текущий pipeline обновления.
Для мгновенного эффекта используется:
chart.update('none');
Это отключает анимацию и делает переход мгновенным, что важно для интерактивных интерфейсов.
interactionНесмотря на это, механизм остаётся основным способом внешнего управления состоянием hover в Chart.js.