Highchart:如何防止"闪回"在动画?

时间:2016-08-17 07:46:32

标签: javascript jquery highcharts

这是关注的代码:user_send_packet (X-axis : datetime Y-axis : number)

    $(function() {
    var chartData = [100, 150, 170, 100.823, 100.823, 94.3796, 96.7395, 98.6239, 102.914, 100.331, 114.383, 110.577, 120.006, 123.887,
                    120, 160, 50, 60, 70, 100, 120, 160, 50, 60, 70, 100];
    var timeStamps = [];
    var dataToDisplay = []
    var index = 1;
    var chart1, chart2;
    $('#b').click(function(){
        timeStamps.push(new Date());
        var buttonB =  document.getElementById('b');
        buttonB.disabled = true;
        if(index <= chartData.length){
            chart1.xAxis[0].setExtremes(index-1,index);  
            chart1.series[0].show();                           
            setTimeout(function(){
                if(index == 1){
                    chart1.series[0].setData([chartData[0]]);                                
                }else{
                    chart1.series[0].setData(dataToDisplay);
                }
                chart1.series[0].addPoint(chartData[index]);
            }, 1000);                     

            setTimeout(function(){chart1.series[0].hide();}, 2000);
            /* A new data point is added to the chart on the right 
            (two new data points when the index is 1). */ 
            setTimeout(function(){
                if(index === 1){
                    dataToDisplay.push(chartData[0]);
                    dataToDisplay.push(chartData[1]);
                }else{
                    dataToDisplay.push(chartData[index]);                  
                }
                console.log(dataToDisplay);
                chart2.series[0].setData(dataToDisplay);
                index++;  
            }, 2000);

        }

        if(index < chartData.length - 1){
            setTimeout(function(){buttonB.disabled = false;}, 2000);
        }else{
            setTimeout(function(){buttonB.style.visibility="hidden";}, 2000);
        }
        if(index == chartData.length - 2){
            setTimeout(function(){document.getElementById('b').innerHTML = 'Last Period';}, 2000);
        }
        console.log(timeStamps);
    })
    Highcharts.setOptions({
        lang: {
            decimalPoint: ','
        },
    });
    chart1 = new Highcharts.Chart({
        chart: {
            renderTo: 'container',
            type: 'line',
            width: 170,
            marginLeft: 74,
            marginRight: 16,
            marginBottom: 60,            
            events: {
                load: function() {
                    this.xAxis[0].setExtremes(0,1);                         
                }
            }
        },
        title: {
            text: '' 
        },
        colors: [
        '#0000ff',
        ],
        xAxis: {
            title: {
                text: ''
            },
            gridLineWidth: 1
        },
        yAxis: {
            title: {
                text: 'Value'
            },
            min:40,
            max:160,
            tickPixelInterval: 20
        },
        plotOptions: {
            line: {
                marker: {
                    enabled: false
                }
            }
        },

        tooltip: {
            formatter: function () {
                return Highcharts.numberFormat(this.y, 2) + 'GE';
            }
        },
        legend: {
            enabled: false
        },
        exporting: {
            enabled: false
        },
        credits:{
            enabled:false
        },
        series: [{
            name: '',
            data: []
        }]
    });

    chart2 = new Highcharts.Chart({
        chart: {
            renderTo: 'container1',
            type: 'line',
            width: 2002,
            marginLeft: 55,
            marginRight:3,
            marginBottom: 60

        },
        colors: [
            '#0000ff',
        ],
        title: {
            text: '' 
        },
        xAxis: {
            title: {
                text: ''
            },
            gridLineWidth: 1,
            startOnTick: true,
            tickPixelInterval: 80,
            min:0,
            max:24
        },
        yAxis: {
            title: {
                text: 'Value'
            },
            min:40,
            max:160,
            tickPixelInterval: 20
        },
        plotOptions: {
            line: {
                marker: {
                    enabled: false
                }
            }
        },
        tooltip: {
            formatter: function () {
                return Highcharts.numberFormat(this.y, 2) + 'GE';
            }
        },
        legend: {
            enabled: false
        },
        exporting: {
            enabled: false
        },
        credits:{
           enabled:false
        },
        series: [{
           name: '',
           data: []
        }]
    });
});

图表按照我的要求工作,除了第一次点击时按钮的所有点击,左边的图表总是显示前一次模拟的趋势线,我想防止(即当我第二次点击按钮时,我想要的是左边的图表应该只显示第1期到第2期的线作为动画(x = 1的数据点显示在对应于第1期的网格线上) ,然后一条线被绘制到x = 2的数据点。显示的是,在希望的动画之前,从0到1的行回闪。)

我已经尝试了redraw()并把行chart1.series [0] .show();
在代码的不同部分。但是,如果不纠正问题,这种改变要么没有效果,要么有其他不可取的影响。

有什么方法可以解决这个问题吗? (我认为它与setExtreme方法有关)

演示屏幕截图:http://jsfiddle.net/z24ysp8m/18/

(注意:我已经改变了JSFiddle以使趋势更加可分化。)

1 个答案:

答案 0 :(得分:1)

您可以简单地使用Highcharts功能的参数!

  

来自documentation

     

setExtremes (Number min, Number max, [Boolean redraw], [Mixed animation])

     

设置最小值和最大值   渲染时间后的轴。如果是startOnTick和endOnTick选项   如果为true,则将最小值和最大值四舍五入为   最接近的。为防止这种情况,可以将这些选项设置为false   在调用setExtremes之前。此外,setExtremes不允许范围   低于minRange选项,默认情况下为5   分。

     

<强>参数

     
      
  • min :Number新的最小值
  •   
  • max :Number新的最大值
  •   
  • redraw :Boolean默认为true。是否重绘图表或等待   显式调用chart.redraw()。
  •   
  • 动画:混合默认为   真正。如果为true,则调整大小将使用默认动画进行动画处理   选项。动画也可以是配置对象   属性持续时间和缓和。
  •   

以下是我在您的代码中所做的修改:

        chart1.series[0].show(); 
        chart1.xAxis[0].setExtremes(index-1,index,true,false); 

        //setTimeout(function(){
            if(index == 1){
                chart1.series[0].setData([chartData[0]]);                                
            }else{
                chart1.series[0].setData(dataToDisplay);
            }
            chart1.series[0].addPoint(chartData[index]);
        //}, 1000);                     

        setTimeout(function(){chart1.series[0].hide();}, 2000);

完整代码:http://jsfiddle.net/z24ysp8m/27/