1) Как сделать так, чтобы серия отображалась во всплывающей подсказке только тогда, когда она действительно присутствует?
Нежелательное поведение вызвано функцией searchPoint
- она возвращаетближайшая точка, даже если позиция х не совпадает с другими точками.Поэтому, если у серии есть только одна точка, она всегда будет найдена.
Решение:
Вручную выберите точки для отображения в tooltip.formatter
:
formatter: function() {
var outputString = '';
this.points.forEach(function(point) {
if (point.x === this.x) {
outputString += "<span style='color:" + point.color + "'>\u25CF</span> " + point.series.name + ": <b>" + point.y + "</b><br/>";
}
}, this);
return outputString;
}
Справочник по API: https://api.highcharts.com/highcharts/tooltip.formatter
2) Как убедиться, что всплывающая подсказка закрыта при выходе из графика?
Восстановите функцию по умолчанию Highcharts.Pointer.prototype.reset
, удалив следующие строки:
Highcharts.Pointer.prototype.reset = function() {
return undefined;
};
Демонстрация для обоих вопросов: https://jsfiddle.net/BlackLabel/2mxxrk5n/
Обновление:
Я отправил неправильный ответ на второй вопрос.Этот код скрывает всплывающие подсказки:
$('#container').bind('mouseout', function(e) {
Highcharts.charts.forEach(function(chart) {
chart.tooltip.hide();
// undo point highlight
chart.series.forEach(function(series) {
series.points.forEach((point) => point.setState(''));
});
});
});
Подскажите, пожалуйста, как выделить соответствующие точки на каждом графике?На данный момент всплывающая подсказка отображается правильно, однако точки не выделены на трех графиках
Этот фрагмент основных моментов:
points.forEach(function(point_) {
if (point_) {
point_.highlight(e);
}
}, this);
Для достижения желаемого поведения вы должны предоставитьлогика для фильтрации точек, которые должны быть выделены.Вот очень упрощенный пример, адаптированный к этому конкретному случаю:
// provide a logic for filtering points
if(points[0] && points[1].x > 0) {
points.pop(); // remove the unwanted point
}