2016-04-05 14 views
3

Ich möchte Tooltip in synchronisierten Diagrammen anzeigen. Bitte beachten Sie dieser JsfiddleHighcharts Synchronisierte Diagramme zeigen Tooltip

$('#container').bind('mousemove touchmove touchstart', function(e) { 
    var chart, 
     point, 
     i, 
     event; 

    for (i = 0; i < Highcharts.charts.length; i = i + 1) { 
     chart = Highcharts.charts[i]; 
     event = chart.pointer.normalize(e.originalEvent); // Find coordinates within the chart 
     point = chart.series[0].searchPoint(event, true); // Get the hovered point 

     if (point) { 
     point.onMouseOver(); // Show the hover marker 
     chart.tooltip.refresh(point); // Show the tooltip 
     chart.xAxis[0].drawCrosshair(event, point); // Show the crosshair 
     } 
    } 
    }); 

Der Tooltip nur die erste Reihe anzeigen kann, aber keine zweite Serie, auch Maus, um die zweite Serie schweben.

enter image description here

Bitte Beratung.

Antwort

6

Zuerst muss die Tooltip-Option shared auf true gesetzt werden. Dann müssen Sie die mousemove touchmove touchstart -Eventhandler aktualisieren mit mehreren Serien beschäftigen/-punkte

$('#container').bind('mousemove touchmove touchstart', function(e) { 
     var chart, 
     points, 
     i, 
     secSeriesIndex = 1; 

     for (i = 0; i < Highcharts.charts.length; i++) { 
      chart = Highcharts.charts[i]; 
      e = chart.pointer.normalize(e); // Find coordinates within the chart 
      points = [chart.series[0].searchPoint(e, true), chart.series[1].searchPoint(e, true)]; // Get the hovered point 

      if (points[0] && points[1]) { 
       if (!points[0].series.visible) { 
        points.shift(); 
        secSeriesIndex = 0; 
       } 
       if (!points[secSeriesIndex].series.visible) { 
        points.splice(secSeriesIndex,1); 
       } 
       if (points.length) { 
        chart.tooltip.refresh(points); // Show the tooltip 
        chart.xAxis[0].drawCrosshair(e, points[0]); // Show the crosshair 
       } 
      } 
     } 
}); 

http://jsfiddle.net/doc_snyder/51zdn0jz/6/ für Ihre aktualisierte Geige See. Ich habe gnädig den Code in diesem Beitrag http://forum.highcharts.com/highcharts-usage/synchronize-chart-with-shared-tooltip-t33919/ genommen.

3

Ich habe mehr flexible Lösung basierend auf Martin Schneider Antwort geschrieben.

In meinen Container 3 Charts, hat zuerst 2 Serien, zweite 6 Serie und dritte 3 Serie, Teil der Serie nicht standardmäßig sichtbar, Teil mit deaktivierten Maus Ereignisbehandlung.

$('#charts-container').on('mousemove touchmove touchstart', shared_tooltip_handler); 

shared_tooltip_handler = function (e) { 
    var chart, point, i, event; 

    var charts = $(this).children('div'); 

    for (i = 0; i < charts.length; i = i + 1) { 
     chart = $(charts[i]).highcharts(); 
     if (!chart) continue; 
     // Find coordinates within the chart 
     event = chart.pointer.normalize(e.originalEvent); 

     var points = []; 
     for (j = 0; j < chart.series.length; j = j + 1) { 
      serie = chart.series[j]; 
      if (!serie.visible || serie.enableMouseTracking === false) continue; 

      point = serie.searchPoint(event, true); 
      // Get the hovered point 
      if (point) points.push(point); 
     } 

     if (points.length) { 
      if (chart.tooltip.shared) { 
       chart.tooltip.refresh(points); 
      } else { 
       chart.tooltip.refresh(points[0]); 
      } 
      chart.xAxis[0].drawCrosshair(e, points[0]); 
     } 
    } 
}; 
+0

Ich denke, es ist etwas fehlt, weil dieser nach oben bringt 'Uncaught Reference: App nicht –

+0

@SvenReuter ist defined', ich habe Objekt' App' definiert, dieses Objekt haben Eigenschaft 'helpers'. Es ist der Weg, nicht alles im globalen Namespace zu platzieren. Damit es funktioniert, ersetzen Sie 'App.helpers.shared_tooltip_handler' durch' shared_tooltip_handler' –

+0

Vielleicht möchten Sie Ihren Code anpassen, so dass er ohne Ihren Kontext verwendbar ist. Ich denke, das wäre für Besucher viel hilfreicher. –

Verwandte Themen