echarts柱状图动态数据分页实现

需求:后台返回数据条目不固定,实现柱状图动态分页功能

  1. 这里先定义假数据11条,比如每页5条,先预处理下timeline的data
var chartData = {
        X: ['名称1', '名称2', '名称3', '名称4', '名称5', '名称6', '名称7', '名称8', '名称9', '名称10', '名称11'],
        Y1: [460, 490, 400, 530, 500, 500, 490, 400, 530, 500, 500],
        Y2: [455, 440, 420, 520, 510, 500, 490, 400, 530, 500, 500],
        Y3: [430, 420, 440, 510, 550, 500, 490, 400, 530, 500, 500],
    };
// 处理柱状图分页
var pageArr = [];
for (var i = 0; i < Math.ceil(chartData.X.length / 5); i++) {
    pageArr.push(i);
}

2.配置基础option参数,需要注意的是,动态数据需要动态追加到options,所以,我们先定义一项options用来配置我们所需要的样式,后面页码直接push到options里会沿用第一项的样式。x、y轴数据用slice方法切出前5项。

var myChart = echarts.init(document.getElementById('loadChart'));
var option = {
        timeline: {
            data: pageArr,
            label: {
                formatter: function (s) { return s + 1 }, // 数据从0开始,格式化时要加1
            },
            autoPlay: false,
            playInterval: 3000,
            top: '0%',
            tooltip: { formatter: function (s) { return "第" + (s.value + 1) + "页"; } }
        },
        options: [
            {
                color: ['#a4c4bf', '#1b9a9c', '#007abb'],
                tooltip: {
                    trigger: 'axis',
                },
                legend: {
                    data: ["当前潮流", "稳定限额", "控后潮流"],
                    right: '2%',
                    icon: "rect",
                    itemWidth: 14,
                    textStyle: {
                        fontSize: 16,
                    },
                },
                calculable: true,
                grid: {
                    left: '2%',
                    right: '2%',
                    bottom: '2%',
                    containLabel: true
                },
                xAxis: [
                    {
                        type: 'category',
                        data: chartData.X.slice(0, 5),

                        axisTick: {
                            alignWithLabel: true
                        },
                        axisLabel: {
                            fontSize: 16,
                            interval: 0
                        },
                    }
                ],
                yAxis: [
                    {
                        type: 'value',
                        axisLabel: {
                            fontSize: 16,
                        },
                        splitLine: {
                            show: true,
                            lineStyle: {
                                type: "dashed",
                                color: "#007173",
                            },
                        },
                    }
                ],
                series: [
                    {
                        'name': '当前潮流', 'type': 'bar', 'barWidth': '18%',
                        'data': chartData.Y1.slice(0, 5)
                    },
                    {
                        'name': '稳定限额', 'type': 'bar', 'barWidth': '18%',
                        'data': chartData.Y2.slice(0, 5)
                    },
                    {
                        'name': '控后潮流', 'type': 'bar', 'barWidth': '18%',
                        'data': chartData.Y3.slice(0, 5)
                    }]
            },
        ]
    };

3.把数据切成每5条一组,push到option的options里面

// 切分数据每5个一组
    for (var i = 1; i < pageArr.length + 1; i++) {
        var obj = {
            series: [
                { 'data': chartData.Y1.slice(i * 5, i * 5 + 5) },
                { 'data': chartData.Y2.slice(i * 5, i * 5 + 5) },
                { 'data': chartData.Y3.slice(i * 5, i * 5 + 5) }
            ],
            xAxis: [{ 'data': chartData.X.slice(i * 5, i * 5 + 5) }]
        }
        option.options.push(obj);
    }
myChart.setOption(option);

4.赋上效果图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值