Javascript 同时在highcharts中显示多个工具提示

Javascript 同时在highcharts中显示多个工具提示,javascript,jquery,charts,highcharts,Javascript,Jquery,Charts,Highcharts,我想在Highchart中同时显示多个工具提示。基本要求是,每当鼠标悬停在序列中的某个点上时,我需要显示悬停点半径X内所有点的工具提示。到目前为止,我已经尝试过类似的方法: $(函数(){ $(“#容器”)。高图({ 标题:{ 文本:“多个工具提示” }, 打印选项:{ 系列:{ 要点:{ 活动:{ 鼠标悬停:函数(事件){ var r=50; var-arr=[]; var图表=this.series.chart; var currX=this.plotX; var currY=this.pl

我想在Highchart中同时显示多个工具提示。基本要求是,每当鼠标悬停在序列中的某个点上时,我需要显示悬停点半径X内所有点的工具提示。到目前为止,我已经尝试过类似的方法:

$(函数(){
$(“#容器”)。高图({
标题:{
文本:“多个工具提示”
},
打印选项:{
系列:{
要点:{
活动:{
鼠标悬停:函数(事件){
var r=50;
var-arr=[];
var图表=this.series.chart;
var currX=this.plotX;
var currY=this.plotY;
var points=this.series.points;

对于(var i=0;i,如果不需要一个通用的工具提示,请在工具提示块中写入以下内容

tooltip: {
        enabled: true,
        shared : false
    }

如果您不想要一个通用的工具提示,请在工具提示块中写入以下内容

tooltip: {
        enabled: true,
        shared : false
    }

实现这一点的一种方法是克隆工具提示。此外,当您将鼠标悬停在新点上时,您必须跟踪克隆,以正确删除旧工具提示并添加新工具提示

添加到代码中的示例如下(注释了新代码):

//用于跟踪打开的工具提示的数组
var openTooltips=[];
$(“#容器”)。高图({
//跳过不相关的选项
打印选项:{
系列:{
要点:{
活动:{
鼠标悬停:函数(事件){
var图表=this.series.chart;
//删除所有当前打开的工具提示
对于(var i=0;i对于(var i=0;i来说,实现这一点的一种方法是克隆工具提示。此外,当您将鼠标悬停在新点上时,您必须跟踪克隆,以正确删除旧工具提示并添加新工具提示

添加到代码中的示例如下(注释了新代码):

//用于跟踪打开的工具提示的数组
var openTooltips=[];
$(“#容器”)。高图({
//跳过不相关的选项
打印选项:{
系列:{
要点:{
活动:{
鼠标悬停:函数(事件){
var图表=this.series.chart;
//删除所有当前打开的工具提示
对于(var i=0;i对于(var i=0;它似乎不起作用。我已经试过了。你能看到我的示例中是否缺少其他似乎不起作用的东西吗?我已经试过了。你能看到我的示例中是否缺少其他东西吗?太好了。谢谢。有没有办法跨越工具提示,使它们不会相互重叠?Pawel有一个解决方法talabels,可能适用于工具提示。请参阅。您好,有人能在此问题上提供帮助吗?很好。谢谢。有没有办法跨越工具提示,使它们不会相互重叠?Pawel有一个数据标签解决方案,可以适用于工具提示。请参阅。您好,有人能在此问题上提供帮助吗
// Array for keeping track of open tooltips
var openTooltips = [];

$('#container').highcharts({
     // Skipping irrelevant options

    plotOptions: {
        series: {
            point: {
                events: {
                    mouseOver: function (event) {
                        var chart = this.series.chart;

                        // Remove any currently open tooltips
                        for(var i = 0; i < openTooltips.length; i++) {      
                            chart.container.firstChild.removeChild(openTooltips[i]);
                        }
                        // Reset array
                        openTooltips = [];

                        var r = 50;
                        var currX = this.plotX;
                        var currY = this.plotY;
                        var points = this.series.points;
                        for(var i=0;i<points.length;i++){
                            var xdiff = currX - points[i].plotX;
                            var ydiff = currY - points[i].plotY;
                            // Changed distance formula to use plus instead of minus
                            var distance = Math.abs(xdiff*xdiff + ydiff*ydiff);
                            if(distance < r*r) {
                                // Open the tooltip for the point
                                chart.tooltip.refresh([points[i]]);
                                // Clone tooltip and add it to array
                                openTooltips.push(this.series.chart.tooltip.label.element.cloneNode(true));
                                // Append tooltip to show it in chart
                                chart.container.firstChild.appendChild(openTooltips[openTooltips.length-1]);
                            }
                        }
                    }
                }
            },
        }
    },

    tooltip: {
        enabled: true,
        shared : true,
        animation: false // Disable animation to get correct tooltip positions
    }
});