highcharts一个charts加载多个id,循环charts并动态加载series数据

本文为原创,不经同意,不能转载,谢谢大家理解。

PS:因為在工作中經常會用的這個插件,所以做個日常歸納方便自己查閱,也幫助大家更快速的解決關於這個插件的各種問題和需要的樣式,希望也能幫助大家,謝謝,如有雷同純屬巧合,慢慢完善中。

因为公司需求要在一个页面加载多个图表,如果一个id写一个图表的话,不知道要写多少代码,所以就开始简化代码之路;而且series里面的数据需要动态加载,我也不知道会加载多少数据,所以,能简化就简化吧,在此给大家分享一下,有什么问题或者错误的地方还请纠正,感谢大家。

解决思路分析

第一种办法:

1:首先的解决思路是,同时加载多个图表的话,必须要在ajax下面套一个for循环,然后循环整个charts

2:因为图表是根据id来分配放在那里的,所以,在json中要放一个专门放id的属性和属性值,也有其他办法,以后在完善吧!话不多说上代码~

3:我懒得写命名这些啦,大家看得懂就可以哟,取名字什么的最烦了,哈哈哈,见谅哈~~~

HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <div id="container1" style="min-width:400px;height:400px"></div>
        <div id="container2" style="min-width:400px;height:400px"></div>
        <script type="text/javascript" src="js/jquery.min.js"></script>
        <script type="text/javascript" src="js/highcharts.js"></script>
        <script>
            $(document).ready(function() {
                $.ajax({
                    type: "get",
                    url: "js/index.json",//加载json数据
                    dataType: "json",
                    async: true,
                    success: function(reDatea) {
                        for(var bigxh = 0; bigxh < reDatea.reDates.length; bigxh++) {
                            var reDate = reDatea.reDates[bigxh];
                            console.log(JSON.stringify(reDate.idd));
                            var ids = reDate.idd;
                            var chart = Highcharts.chart({
                                chart: {
                                    renderTo: ids,
                                    type: 'line'
                                },
                                title: {
                                    text: '<span style="font-family:Arial">' + reDate.ChartName + '</span>'
                                },
                                subtitle: {
                                    text: ''
                                },
                                xAxis: {
                                    categories: reDate.XAxisName
                                },
                                yAxis: {
                                    title: {
                                        text: ''
                                    }
                                },
                                exporting: {
                                    enabled: false
                                },
                                tooltip: {
                                    crosshairs: true,
                                    shared: false,
                                    formatter: function() {
                                        return '<b>' + this.series.name + '</b><br>' + '时间:' +
                                            this.x + '<br>FR:' + this.y;
                                    }
                                },
                                series: [{
                                    name: '东京',
                                    marker: {
                                        symbol: 'square'
                                    },
                                    data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, {
                                        y: 26.5,
                                        marker: {
                                            symbol: 'url(https://www.highcharts.com/demo/gfx/sun.png)'
                                        }
                                    }, 23.3, 18.3, 13.9, 9.6]
                                }]
                            });

                            var serieslen = chart.series.length;
                            for(var i = 0; i < serieslen; i++) {
                                chart.series[i].remove();
                            }

                            for(var s = 0; s < reDate.DataList.length; s++) {
                                var aa = reDate.DataList[s];
                                var bb = {
                                    name: aa.name,
                                    data: aa.data,
                                    dataLabels: {
                                        enabled: true,
                                        style: {
                                            fontSize: '14px',
                                            color: '#000',
                                            fontFamily: 'Arial',
                                        },
                                        format: '{y}'
                                    },
                                }
                                chart.addSeries(bb);
                            }
                        }

                    }
                });

            })
        </script>
    </body>
</html>

JSON:

{"reDates":[{"ChartName":"2010 ~ 2016 年太阳能行业就业人员发展情况","idd":"container1","XAxisName":["Feb","Mar","W01","W02","W03","W04"],"DataList":[{"name":"安装,实施人员","data":[8000,4000,8000,6000,5000,4000]},{"name":"工人","data":[8000,5000,8000,8000,6000,5000]},{"name":"销售","data":[5000,8000,4000,8000,8000,8000]}]},{"ChartName":"美苏核武器库存量","idd":"container2","XAxisName":["Feb","Mar","W01","W02","W03","W04"],"DataList":[{"name":"美国","data":[3000,4000,8000,6000,5000,4000]},{"name":"苏联/俄罗斯","data":[8000,5000,8000,8000,6000,5000]},{"name":"其他","data":[5000,8000,4000,8000,8000,8000]}]}]}

第二种办法:

1:首先的解决思路是,同时加载多个图表的话,必须要在ajax下面套一个for循环,然后循环整个charts。

2:在前端頁面container0從0開始寫,然後在大循環中直接循環大循環的bigxh參數,就可以了。

3:我懒得写命名这些啦,大家看得懂就可以哟,取名字什么的最烦了,哈哈哈,见谅哈~~~

HTML:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body>
        <div id="container0" style="min-width:400px;height:400px"></div>
        <div id="container1" style="min-width:400px;height:400px"></div>
        <script type="text/javascript" src="js/jquery.min.js"></script>
        <script type="text/javascript" src="js/highcharts.js"></script>
        <script>
            $(document).ready(function() {
                $.ajax({
                    type: "get",
                    url: "js/index.json",//加载json数据
                    dataType: "json",
                    async: true,
                    success: function(reDatea) {
                        for(var bigxh = 0; bigxh < reDatea.reDates.length; bigxh++) {
                            var reDate = reDatea.reDates[bigxh];
                            var chart = Highcharts.chart({
                                chart: {
                                    renderTo: ‘container’+bigxh.toString(),//這裡的num是根據大循環的bigxh的參數走的,這個要注意下
                                    type: 'line'
                                },
                                title: {
                                    text: '<span style="font-family:Arial">' + reDate.ChartName + '</span>'
                                },
                                subtitle: {
                                    text: ''
                                },
                                xAxis: {
                                    categories: reDate.XAxisName
                                },
                                yAxis: {
                                    title: {
                                        text: ''
                                    }
                                },
                                exporting: {
                                    enabled: false
                                },
                                tooltip: {
                                    crosshairs: true,
                                    shared: false,
                                    formatter: function() {
                                        return '<b>' + this.series.name + '</b><br>' + '时间:' +
                                            this.x + '<br>FR:' + this.y;
                                    }
                                },
                                series: [{
                                    name: '东京',
                                    marker: {
                                        symbol: 'square'
                                    },
                                    data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, {
                                        y: 26.5,
                                        marker: {
                                            symbol: 'url(https://www.highcharts.com/demo/gfx/sun.png)'
                                        }
                                    }, 23.3, 18.3, 13.9, 9.6]
                                }]
                            });

                            var serieslen = chart.series.length;
                            for(var i = 0; i < serieslen; i++) {
                                chart.series[i].remove();
                            }

                            for(var s = 0; s < reDate.DataList.length; s++) {
                                var aa = reDate.DataList[s];
                                var bb = {
                                    name: aa.name,
                                    data: aa.data,
                                    dataLabels: {
                                        enabled: true,
                                        style: {
                                            fontSize: '14px',
                                            color: '#000',
                                            fontFamily: 'Arial',
                                        },
                                        format: '{y}'
                                    },
                                }
                                chart.addSeries(bb);
                            }
                        }

                    }
                });

            })
        </script>
    </body>
</html>

JSON:

{"reDates":[{"ChartName":"2010 ~ 2016 年太阳能行业就业人员发展情况","XAxisName":["Feb","Mar","W01","W02","W03","W04"],"DataList":[{"name":"安装,实施人员","data":[8000,4000,8000,6000,5000,4000]},{"name":"工人","data":[8000,5000,8000,8000,6000,5000]},{"name":"销售","data":[5000,8000,4000,8000,8000,8000]}]},{"ChartName":"美苏核武器库存量","XAxisName":["Feb","Mar","W01","W02","W03","W04"],"DataList":[{"name":"美国","data":[3000,4000,8000,6000,5000,4000]},{"name":"苏联/俄罗斯","data":[8000,5000,8000,8000,6000,5000]},{"name":"其他","data":[5000,8000,4000,8000,8000,8000]}]}]}

昨天写好后,忘记给大伙们来张图了,图献上:这个就是通过同一个charts循环出来的2个charts图:

猜你喜欢

转载自blog.csdn.net/weixin_41406727/article/details/88370902