Highcharts : using same div to load a chart multiple times with different series data

感情迁移 提交于 2019-12-24 10:54:08

问题


I have written a function that creates a chart based on some graphdata as parameter and renders it to a div . Now I am reusing this function to generate same type of chart on same div to load different series data . The problem is I can see the graph rendering shows previous charts labels for a second and then the new graph gets loaded with new labels . I dont want to see the old graph when my new graph gets loaded . Please help .

My chart function :

<html>
<head>
    <script src="./jquery.min.jsl"></script>
    <script src="./highcharts.jsl"></script>
    <script src="./exporting.jsl"></script>
    <meta name="viewport" content="user-scalable=no">
    <script>

        function renderGraph(graphdata) {
            var graphObj = JSON.parse(graphdata);
            var chart = null; 
            Highcharts.setOptions({
                lang : {
                    numericSymbols : ["K", "M", "G", "T", "P", "E"]
                }
            });
            var change = {
                0 : '$0K',
                2 : '$2K',
                4 : '$4K',
                6 : '$6K',
                8 : '$8K'
            };
            var xAxisLegends = graphObj.bottomLegends;
            var seriesData = graphObj.seriesData;
            var xAxisLegends = graphObj.bottomLegends;
            //['Q2, 16', 'Q3, 16', 'Q4, 16', 'Q1, 17'];
            var columnColors = ["#69C3DB", "#3a8a9f"];

            var seriesData = graphObj.seriesData;
            /*[{
            name : 'Budget',
            showInLegend : false,
            data : [2, 4, 6, 8]
            }, {
            name : 'Utilisation',
            showInLegend : false,
            data : [1, 2, 3, 4]
            }];*/

            // variables which have diff values according to OS
            var chartProperties = {};
            // properties to assign to Charts's object
            var graphHeight = 0;
            // height of chart
            var graphWidth = 0;
            //Width of the column
            var pointWidth;

            // Separating the graph dimensions & styling properties as per OS name & version
            if (graphObj.osname == "iphone") {
                chartProperties = {
                    type : 'column',
                    renderTo : 'container'
                };
                xAxisProp = {
                    gridLineWidth : 0,
                    categories : xAxisLegends,
                    crosshair : true
                };
                yAxisProp = {
                    min : 0,
                    gridLineWidth : 0,
                    tickAmount : 5,
                    title : {
                        text : ' '
                    },
                    labels : {
                        formatter : function() {
                            var value = this.axis.defaultLabelFormatter.call(this);
                            return '$' + value;
                        }
                    }
                };
                pointWidth = 5;
            } else if (graphObj.osname == "android") {
                chartProperties = {
                    type : 'column',
                    plotBackgroundColor : null,
                    plotBackgroundImage : null,
                    plotBorderWidth : 0,
                    plotShadow : false,
                    height : 450,
                    marginTop : 100,
                    marginLeft : 120

                },
                xAxisProp = {
                    categories : xAxisLegends,
                    width : 800,
                    tickmarkPlacement : 'on',
                    labels : {
                        y : 40,
                        style : {
                            color : '#333333',
                            fontSize : '25',
                            fontFamily : 'Metropolis-Light',
                            opacity : '.6'
                        },

                    }
                };
                yAxisProp = {
                    gridLineWidth : 0,
                    min : 0,
                    tickAmount : 5,
                    offset : 60,
                    title : {
                        text : ''
                    },
                    labels : {
                        align : 'left',
                        style : {
                            color : '#333333',
                            fontSize : '28',
                            fontFamily : 'Metropolis-Light',
                            opacity : '.5'
                        },
                        formatter : function() {
                            var value = this.axis.defaultLabelFormatter.call(this);
                            return '$' + value;
                        }
                    },

                };
                pointWidth = 10;
                if (parseInt(graphObj.osversion) >= 500 && parseInt(graphObj.osversion) <= 600) {
                    graphHeight = 600;
                } else {
                    graphHeight = 630;
                }
            }
            chart = 
                Highcharts.chart('container', {
                    chart : chartProperties,
                    credits : {
                        enabled : false
                    },
                    tooltip : {
                        enabled : false
                    },
                    exporting : {
                        enabled : false
                    },
                    title : {
                        text : ''
                    },
                    xAxis : xAxisProp,
                    yAxis : yAxisProp,
                    plotOptions : {
                        column : {
                            pointPadding : 0.2,
                            borderWidth : 0,
                            groupPadding : 0.38,
                            pointWidth : pointWidth
                        }
                    },
                    colors : columnColors,
                    series : seriesData
                });


        }

    </script>

</head>
<body>
    <div id="container" style="height: 100%; width: 100%; position : center;"></div>
</body>

The function that calls this chart :

 $.webViewPerformanceGraph.url = "/html/Performance.html";

            $.webViewPerformanceGraph.addEventListener('load', function() {
                $.webViewPerformanceGraph.evalJS("renderGraph('" + JSON.stringify(params) + "');");

回答1:


Since you're using jQuery, have you tried simply emptying the container div as follows before redrawing the chart?

$('#container').html();

Perhaps this would be more beneficial since chart.destroy() doesn't seem to be working in your case.

From http://api.jquery.com/html/#html2:

When .html() is used to set an element's content, any content that was in that element is completely replaced by the new content. Additionally, jQuery removes other constructs such as data and event handlers from child elements before replacing those elements with the new content.



来源:https://stackoverflow.com/questions/48811451/highcharts-using-same-div-to-load-a-chart-multiple-times-with-different-series

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!