Highcharts在具有多个系列和共享工具提示的图表之间共享工具提示

Ale*_* K. 2 javascript highcharts

我正在尝试在图表之间设置共享工具提示.只有当工具提示没有时shared: true,它才能正常工作,如果我设置shared: true我会收到错误:

TypeError: 'undefined' is not an object (evaluating 'a[0].category') highcharts.js:3259
Run Code Online (Sandbox Code Playgroud)

我准备了一个例子:http://jsfiddle.net/CAKQH/24408/

如果你将光标移动到第一个图表上 - 它的效果很好,如果你评论shared: true它可以工作,但如果你在第二个图表上移动光标,你将收到一个错误.

有人遇到过这个错误吗?请帮我解决一下.

Hal*_*and 6

出现此问题的原因是您shared: true在一个图表上,而在另一个图表上具有默认值(false).这是一个问题,因为该tooltip.refresh方法将采用不同的路径,并根据具有共享集的图表为true或false来不同地使用输入.

您可以在第8806行的源代码中找到此分支,tooltip.refresh方法如下:

// shared tooltip, array is sent over
if (shared && !(point.series && point.series.noSharedTooltip)) {
    ....
}
// single point tooltip
else {
    ....
}
Run Code Online (Sandbox Code Playgroud)

您可以通过在syncTooltip方法内部进行分支来处理这种情况(例如JFiddle):

function syncTooltip(container, p) {
    var i = 0;
    for (; i < charts.length; i++) {
        if (container.id != charts[i].container.id) {
            if(charts[i].tooltip.shared) {
                charts[i].tooltip.refresh([charts[i].series[0].data[p]]);
            }
            else {
                charts[i].tooltip.refresh(charts[i].series[0].data[p]);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您可以在两个图表上自由地将共享设置为true或false.

遗憾的是,您的plotOptions.series.point.events.mouseOver-event不会捕获通过该shared: true功能"选中"的点,因此您必须找到备用事件才能正确捕获此情况.