2016-10-10 1 views
1

Ich habe ein Säulendiagramm mit Maus über und out Ereignisse auf series.point.events, wo ich die aktuelle Spalte Spalte Kategorie verwenden müssen. Das Über-Ereignis wird ausgelöst, wenn Sie den Spaltenbereich aufrufen. Wenn Sie die Maus über die Spalte bewegen, wird das Ereignis "out" ausgelöst. Ist dieses Verhalten korrekt? Benutze ich die Ereignisse falsch?highcharts mouse over/out Ereignisse in falschem Timing ausgelöst

hier sind die Diagrammoptionen:

var options = { 
chart: { 
    type: 'column' 
}, 

xAxis: { 
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 
    'Aug', 'Sep', 'Oct', 'Nov', 'Dec' 
    ] 
}, 

tooltip: { 
    shared: true, 
    crosshairs: true 
}, 

series: [{ 
    data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4], 
    point: { 
    events: { 
     mouseOver: function(event) { 
     setTimeout(() => { 
      $mouseState.html("mouse state OVER: " + this.category); 
     }, 2000); 
     }, 
     mouseOut: function() { 
     $mouseState.html("mouse state OUT: " + this.category); 
     } 
    } 
    } 
}] 

};

*** das Timeout ist nur nur für das Debuggen

http://jsfiddle.net/62yhg2hq/3/

Antwort

0

Ich glaube, wenn Sie setTimeout entfernen, wird es funktionieren. Sie sehen, dass nach 2 Sekunden ein Mouseover-Ereignis ausgelöst wird.

Bitte machen Sie stickyTracking = false, denn wenn true, wird das mouseOut-Ereignis in einer Serie erst ausgelöst, wenn die Maus über eine andere Serie bewegt wird. [

Und make tooltip.shared = false, weil Tooltip ausgeblendet wird, wenn Sie die Maus zwischen den Serien bewegen.

$(function() { 
var i=0; 
var j=0; 
var $mouseState = $('#mouseState'); 
var $mouseState2 = $('#mouseState2'); 
var options = { 
chart: { 
    type: 'column' 
}, 

xAxis: { 
    categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 
    'Aug', 'Sep', 'Oct', 'Nov', 'Dec' 
    ] 
}, 

tooltip: { 
    shared: false, 
    crosshairs: true 
}, 

series: [{ 
    data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4], 
    stickyTracking: false, 
    point: { 
    events: { 
     mouseOver: function(event) { 

      $mouseState.html("mouse state OVER: " + this.category +" Number "+i++); 

     }, 
     mouseOut: function() { 
    $mouseState2.html("mouse state OUT: " + this.category +" Number "+ j++); 
     } 
    } 
    } 
    }] 
}; 

$('#container').highcharts(options); 
}); 

[http://jsfiddle.net/62yhg2hq/9/]

+0

danke, aber ich benutzte das Timeout nur zum Debuggen. Wenn Sie in einem Beispiel den Mauszeiger über einen Spaltenbereich bewegen, ohne die Spalte selbst zu berühren, werden die Ereignisse ausgelöst, aber die falsche Kategorie wird gedruckt. –

+0

Ich habe meine Antwort bearbeitet. Bitte prüfe. –

1

Was Sie wollen, ist die Ereignisse unter plotOptions gehen

plotOptions: { 
     series: { 
      cursor: 'pointer', 
      point: { 
       events: { 
        mouseOver: function(event) { 
         $mouseState.html("mouse state OVER: " + this.category); 
        }, 
        mouseOut: function() { 
         $mouseState.html("mouse state OUT: " + this.category); 
        } 
       } 
      } 
     } 
    } 

Aktualisiert Geige mit entfernt geteilt: true Tooltip:

Updated Fiddle

+0

danke, aber ich habe immer noch das gleiche Problem. Wenn Sie den Mauszeiger über einen Spaltenbereich bewegen, ohne die Spalte selbst zu berühren, werden die Ereignisse ausgelöst, aber die falsche Kategorie wird gedruckt. –

+0

freigegebenen Tooltip entfernen - ** shared: true **, Sie haben nur 1 Datensatz, also nichts zu teilen –

+0

das hilft bei den Ereignissen, also danke! Aber gibt es eine Möglichkeit, den Hover-Hintergrund beim Betreten eines Spaltenbereichs anzuzeigen, ohne ihn zu berühren? Die Spalte ist möglicherweise nicht sichtbar, da sie den Wert 0 hat, aber ich muss sie immer noch anzeigen können. –

Verwandte Themen