首页>案例集>JavaScript案例集

利用ajax+mock.js+echarts.js模拟汽车销量饼状图

现在的人都不习惯看表格数据了,很多数据都用的可视化图表来展现,Echarts是其中最出名的开源库,百度出品,有兴趣可以去官网看看。

https://echarts.apache.org/zh/index.html

利用ajax获取数据,但如果后端还没有准备好接口的时候,我们前端可以通过mock的方式模拟数据。

Mock.js就是生成随机数据,拦截 Ajax 请求,这样方便我们提前开发。

Mock的官网:http://mockjs.com/

翻出一个小案例,利用mock模拟出汽车销售人员的姓名和销售数量,并且用升序的方式用饼状图显示。

2.jpg

点击下方的姓名,可以关闭或打开它对应的饼图。

刷新页面,可以看到姓名和数据是随机产生的。

核心代码:

        // mock拦截并模拟数据
        Mock.mock('http://www.mock.com', {
            "cars|5": [
                {
                    "brand": '@cname',
                    "sales_data|100-250": 135
                }
            ]
        }
        )
        // 创建ajax对象
        var xhr = new XMLHttpRequest();
        // 此处的url和mock处一致
        xhr.open('get', 'http://www.mock.com');
        // onload是新增的事件,请求一次,执行一次,在readyState为4的时候触发
        xhr.onload = function () {
            // HTTP状态码为200的时候
            if (xhr.status == 200) {
                var result = JSON.parse(xhr.responseText);
                result = result.cars;
                // 处理获取的数据
                for (let obj of result) {
                    // echarts需要的键名是value和name
                    obj.value = obj.sales_data;
                    obj.name = obj.brand;
                    delete obj.brand;
                    delete obj.sales_data;
                }
                console.log(result);
                const chartDom = document.getElementById('main');
                const myChart = echarts.init(chartDom, 'dark');
                getEcharts(result, myChart);
            }
        }
        xhr.send();
        // echarts的配置
        function getEcharts(mydata, myChart) {
            var option = {
                color: ['#ff585d', '#ffb549', '#41b6e6', '#8bc24c', '#7A57D1'],
                title: {
                    text: '汽车月度销售统计',
                    subtext: '新能源汽车',
                    left: 'center'
                },
                tooltip: {
                    trigger: 'item',
                    backgroundColor: 'rgba(255,255,255,0.7)',
                    formatter: '{b}<br />{c}({d}%)'
                },
                legend: {
                    orient: 'horizontal',
                    left: 'center',
                    bottom: '10%'
                },
                series: [
                    {
                        name: '品牌销量',
                        type: 'pie',
                        radius: '50%',
                        roseType: 'radius',
                        // 对数据中value的值进行升序排序
                        data: mydata.sort(function (a, b) { return a.value - b.value }),
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            };
            option && myChart.setOption(option);
        }


点赞


1
保存到:

相关文章

发表评论:

◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。

Top