Программное управление
listeners сообщают, что сделал пользователь; методы инстанса чарта делают то же самое из кода. Это не синтетические события — вызов идёт ровно тем же путём, что и наведение или клик, поэтому листенеры срабатывают, а состояние меняется так же, как от указателя.
const chart = Charts.create(options);
chart.showTooltip({ datumIndex: 12 }); // навести на датум из строки таблицы
chart.clickNode({ datumIndex: 12 }); // nodeClick + выделение, как от клика
chart.setSelection([{ datumIndex: 3 }, { datumIndex: 7 }]);
chart.zoomToCount(30, { anchor: 'end' }); // показать последние 30 точекМетоды
| Метод | Возвращает | Что делает |
|---|---|---|
showTooltip(target) | boolean | тултип и подсветку датума — как наведение на него |
hideTooltip() | — | убирает и то, и другое — как уход курсора с области |
clickNode(target, opts?) | boolean | nodeClick и изменение выделения, которое даёт клик |
getSelection() | SelectedNode[] | текущее выделение: seriesId, datumIndex, datum |
setSelection(targets, opts?) | — | заменяет выделение целиком |
clearSelection(opts?) | — | очищает его |
isZoomed() | boolean | окно уже полного домена или нет |
zoomTo(window, opts?) | — | { x?: [от, до], y?: [от, до] } — доли домена |
zoomToCount(count, opts?) | — | окно на N элементов; anchor: 'start' | 'end' |
resetZoom(opts?) | — | возврат к полному домену |
target — это { datumIndex, seriesId? }. Без seriesId видимые серии отвечают по порядку: выигрывает первая, у которой есть узел с таким индексом.
Тихие вызовы
Любой вызов, что-то меняющий, по умолчанию уведомляет листенеры. Приложению, которое управляет чартом из собственного состояния, это обычно мешает: листенер вернёт изменение обратно, и они начнут пинг-понг. Передайте { silent: true }:
listeners: {
selectionChange: ({ items }) => store.select(items.map((item) => item.datum.id)),
}
// применяем состояние обратно к чарту — не входя в листенер снова
store.subscribe((ids) => chart.setSelection(ids.map(toTarget), { silent: true }));silent гасит и собственные листенеры чарта, и рассылку в группу синхронизации: тихий zoomTo не сдвинет связанные чарты.
Когда возвращается false
showTooltip и clickNode требуют узла, который действительно есть на экране. Они вернут false, если датум вне текущего окна зума, принадлежит скрытой серии или попросту не существует — это стоит проверять, прежде чем считать тултип показанным. Выделение — учёт, а не геометрия, поэтому setSelection принимает любой индекс.
Отрисовка
Вызовы планируют кадр так же, как обновление опций. Дождитесь waitForUpdate(), если следующая строка зависит от того, что кадр уже на экране: скриншот, замер, проверка в тесте.
chart.showTooltip({ datumIndex: 4 });
await chart.waitForUpdate();
const png = chart.getImageDataURL();Не у всех чартов есть всё
У пирога нет зума, у treemap — тоже. Вызов того, чего у вида чарта нет, — no-op с однократным предупреждением в консоль, а не ошибка: код, общий для нескольких типов чартов, из-за этого не сломается.
| Вид чарта | Тултип | Клик и выделение | Зум |
|---|---|---|---|
| декартовы | ✓ | ✓ | ✓ |
| pie, donut, полярные | ✓ | ✓ | — |
| treemap, sunburst, flow | ✓ | ✓ | — |