Перерисовать тот же хайчарт

Я работаю с highcharts с несколькими барами. Я хочу, чтобы я воспроизвел этот эффект загрузки диаграммы при нажатии определенной кнопки... Я пробовал следующий код

   $('#container').highcharts({
                chart: {
                    type: 'column'
                },
                title: {
                    text: 'Monthly Average Rainfall'
                },
                subtitle: {
                    text: 'Source: WorldClimate.com'
                },
                xAxis: {
                    categories: [
                        'Jan',
                        'Feb',
                        'Mar',
                        'Apr',
                        'May',
                        'Jun',
                        'Jul',
                        'Aug',
                        'Sep',
                        'Oct',
                        'Nov',
                        'Dec'
                    ],
                    crosshair: true
                },
                yAxis: {
                    min: 0,
                    title: {
                        text: 'Rainfall (mm)'
                    }
                },
                tooltip: {
                    headerFormat: '<span style="font-size:10px">{point.key}</span><table>',
                    pointFormat: '<tr><td style="color:{series.color};padding:0">{series.name}: </td>' +
                            '<td style="padding:0"><b>{point.y:.1f} mm</b></td></tr>',
                    footerFormat: '</table>',
                    shared: true,
                    useHTML: true
                },
                plotOptions: {
                    column: {
                        pointPadding: 0.2,
                        borderWidth: 0
                    }
                },
                series: [{
                        name: 'Tokyo',
                        data: [49.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]

                    }, {
                        name: 'New York',
                        data: [83.6, 78.8, 98.5, 93.4, 106.0, 84.5, 105.0, 104.3, 91.2, 83.5, 106.6, 92.3]

                    }, {
                        name: 'London',
                        data: [48.9, 38.8, 39.3, 41.4, 47.0, 48.3, 59.0, 59.6, 52.4, 65.2, 59.3, 51.2]

                    }, {
                        name: 'Berlin',
                        data: [42.4, 33.2, 34.5, 39.7, 52.6, 75.5, 57.4, 60.4, 47.6, 39.1, 46.8, 51.1]

                    }]
            });


function redrawing()
        {


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

но это не работает. Я не хочу менять какие-либо данные или что-либо в диаграмме. Все, что я хочу, это чтобы он перезагружался при нажатии кнопки.


person Omicans    schedule 25.08.2015    source источник


Ответы (2)


Предлагаемый подход состоит в том, чтобы уничтожить, а затем воссоздать диаграмму: http://forum.highcharts.com/highcharts-usage/animation-on-redraw-t8636/#p93199

Вот скрипт, показывающий, как это работает: http://jsfiddle.net/p7xerxh0/1/

    function redraw() {
      $('#container').highcharts().destroy();
      createChart(); // wrap your creation code in a function and call it again
    }
person Birgit Martinelle    schedule 25.08.2015

Я подготовил для вас демонстрацию, которая позволяет "снова запустить анимацию запуска" и остановить/приостановить.

var H = Highcharts,
    c = $('#container').highcharts(),
    chart = c;

H.Series.prototype.afterAnimate = function() {};

function reAnimate(fromStart) {
    // store animation:

    var seriesAnimate = H.Series.prototype.animate;
    var columnAnimate = H.seriesTypes.column.prototype.animate;
    var pieAnimate = H.seriesTypes.pie.prototype.animate;

    // run animation again: tested with line chart only
    H.each(c.series, function (s) {
        if (animation && !isObject(animation)) {
            animation = defaultPlotOptions[series.type].animation;
        }
        var animation = s.options.animation,
            clipBox = s.clipBox || c.clipBox,
            sharedClipKey = ['_sharedClip', animation.duration, animation.easing, clipBox.height].join(','),
            clipRect = c[sharedClipKey],
            markerClipRect = c[sharedClipKey + 'm'];

        if (fromStart) {
            if (clipRect) {
                clipRect.attr({
                    width: 0
                });
            }
            if (markerClipRect) {
                markerClipRect.attr({
                    width: 0
                });
            }
        }
        s.animate = s.type == 'pie' ? pieAnimate : (s.type == 'column' ? columnAnimate : seriesAnimate);
        //s.animate(true);
        s.animate();
    });
}

function isObject(obj) {
    return obj && typeof obj === 'object';
}

Пример: http://jsfiddle.net/j86jkfvj/67/

person Sebastian Bochan    schedule 26.08.2015