2016-07-08 6 views
0

Ich möchte Highcharts Animation ändern/anpassen, wenn neue Punkt hinzufügen. HierHighcharts Spaltenanimation beim Hinzufügen von Punkt (series.addPoint())

series.addPoint([x, y], true, false); 

ist ein Beispiel für hightcharts' default Animation: http://jsfiddle.net/pe4csrr7/ Bei einem Klick auf eine Schaltfläche (neben oder zurück) können Sie sehen, dass die neuen Balken hinter dem letzten erscheint.

Anstelle dieser Standardanimation möchte ich die Balken außerhalb des Diagramms sehen. Hier ist ein Beispiel von dem, was ich will: http://jsfiddle.net/smsducrg/ (Warnung: die Animationen dieses Beispiels sind nicht immer gleich, nach einer Weile wird die Standardanimation zurückkommen, ich weiß nicht warum ...)

Danke.

+0

Hallo, vielleicht statt chart.redraw der Verwendung von() können Sie xAxis.setExtremes() für die Wiederherstellung Ihr Diagramm verwenden. Ich denke, dass Sie mit einem kleinen Trick erreichen können, was Sie möchten. Hier können Sie ein Beispiel sehen, wie es funktionieren kann: http://jsfiddle.net/pe4csrr7/2/ –

+0

Hallo, vielen Dank für Ihre Antwort. Es hat mir sehr geholfen. Aber hast du bemerkt, dass sich die Animation ändert, wenn du bis zu ~ 50 Mal auf "prev" oder "next" klickst (nach ~ 50 clic kommt der neue Balken nicht mehr außerhalb des Graphen) . Wissen Sie warum? Danke. – onlyn

+0

Sie können cropThreshold auf einen größeren Wert setzen: http://jsfiddle.net/pe4csrr7/5/ –

Antwort

0

Vielleicht anstelle von chart.redraw() können Sie xAxis.setExtremes() zum Neuzeichnen Ihres Diagramms verwenden. http://api.highcharts.com/highcharts/Axis.setExtremes

Ich denke, dass mit kleinen Trick Sie erreichen können, was Sie möchten.

$(function() { 
    var chart = $('#container').highcharts({ 
    chart: { 
     type: 'column' 
    }, 
    xAxis: { 
     categories: ['0', '1', '2', '3', '4', '5', '6'] 
    }, 
    series: [{ 
     data: [1, 1, 1, 1, 1, 1, 1], 
     cropThreshold:0 
    }] 
    }); 

    $('#prev').attr('start', 0); 
    $('#next').attr('end', 6); 

    $('#prev').off('click').on('click', function() { 
    var next = parseInt($('#next').attr('end'), 10) - 1; 
    var prev = parseInt($('#prev').attr('start'), 10) - 1; 

    var chart = $('#container').highcharts(); 
    chart.series[0].addPoint({ 
     x: prev, 
     y: 1 
    }, false, false); 
    chart.xAxis[0].setExtremes(prev + 1, next) 
    chart.xAxis[0].setExtremes(prev, next) 

    $('#next').attr('end', next); 
    $('#prev').attr('start', prev); 
    }); 


    $('#next').off('click').on('click', function() { 
    var next = parseInt($('#next').attr('end'), 10) + 1; 
    var prev = parseInt($('#prev').attr('start'), 10) + 1; 

    var chart = $('#container').highcharts(); 
    chart.series[0].addPoint({ 
     x: next, 
     y: 1 
    }, false, true); 
    chart.xAxis[0].setExtremes(prev, next - 1) 
    chart.xAxis[0].setExtremes(prev, next) 
    $('#next').attr('end', next); 
    $('#prev').attr('start', prev); 
    }); 
}); 

Sie benötigen größere cropThreshold als Standard hinzufügen, wenn Sie diese Animation haben wollen auch nach vielen Tastenklicks (so zum Beispiel, wenn Sie 50 Punkte hinzufügen werden).

Hier sehen Sie ein Beispiel sehen, wie es funktionieren kann: http://jsfiddle.net/pe4csrr7/5/