highchart plotline can have move animation?

2019-06-27 04:07发布

Is there any method that allows plotline to move to a new position with animation?

Or do I have to use another plugin?

I want to build like a binaryoption or expertoption game for fun.

It's my simple demo: Sample demo link

$(function () {

    Highcharts.setOptions({
        global : {
            useUTC : false
        }
    });

    // Create the chart
    $('#container').highcharts('StockChart', {
        chart : {
            events : {
                load : function () {

                    // set up the updating of the chart each second
                    var series = this.series[0];

                     var hasPlotLine = false,
                    $button = $('#button'),
                    chart = $('#container').highcharts();                    

                    setInterval(function () {

                    chart.yAxis[0].removePlotLine('plot-line-1');

                        var x = (new Date()).getTime(), // current time
                            y = Math.round(Math.random() * 100);
                        series.addPoint([x, y], true, true);

                   chart.yAxis[0].addPlotLine({
                            value: y,
                            color: 'red',
                            width: 2,
                            id: 'plot-line-1'
                        });
                    }, 1000);
                }
            }
        },

        rangeSelector: {
            buttons: [{
                count: 1,
                type: 'minute',
                text: '1M'
            }, {
                count: 5,
                type: 'minute',
                text: '5M'
            }, {
                type: 'all',
                text: 'All'
            }],
            inputEnabled: false,
            selected: 0
        },

        title : {
            text : 'Live random data'
        },

        exporting: {
            enabled: false
        },

        series : [{
            name : 'Random data',
            data : (function () {
                // generate an array of random data
                var data = [], time = (new Date()).getTime(), i;

                for (i = -999; i <= 0; i += 1) {
                    data.push([
                        time + i * 1000,
                        Math.round(Math.random() * 100)
                    ]);
                }
                return data;
            }())
        }]

    });

});

1条回答
霸刀☆藐视天下
2楼-- · 2019-06-27 04:41

You can use animate function, which allows you to move SVG element smoothly. Set a translateY parameter as a difference between previous and current position of y (toPixels converts value to pixels).

load: function() {

      // set up the updating of the chart each second
      var series = this.series[0],
        hasPlotLine = false,
        $button = $('#button'),
        chart = $('#container').highcharts(),
        yAxis = chart.yAxis[0],
        plotLine,
        d,
        newY;

      yAxis.addPlotLine({
        value: 50,
        color: 'red',
        width: 2,
        id: 'plot-line-1'
      });

      setInterval(function() {

        var x = (new Date()).getTime(), // current time
          y = Math.round(Math.random() * 100);
        series.addPoint([x, y], true, true);

        plotLine = yAxis.plotLinesAndBands[0].svgElem;
        d = plotLine.d.split(' ');

        newY = yAxis.toPixels(y) - d[2];

        plotLine.animate({
          translateY: newY
        }, 300);


      }, 1000);
    }

Example:

查看更多
登录 后发表回答