学习笔记-echarts实现数据下钻

本文详细介绍了如何利用Echarts的点击事件来实现数据下钻功能,包括步骤:监听点击事件、销毁原有Echarts实例、创建并初始化新的Echarts图表,以及替换数据以展示更详细的层次信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近遇到个需求,要实现echarts的数据下钻,奈何本人前端技术实在很low,看了一些大佬的文章,有了一些思路,话不多说,上代码。
<html>
<head>
    <title></title>
    <!-- 引入echarts 文件 -->
    <script src="./echarts.min.js"></script>
</head>
<body>
<div class="container" style="margin: 20px auto">
    <div class="row">
        <div id="bar_photo_id" class="col-md-4" style="height: 350px;"><!-- 柱状图-->
        </div>
    </div>
</div>

<script type="text/javascript">
  var tempList = ${tempList};
    function loadData(){
        var x_data = [];
        var y_data  = [];
        for(var i = 0;i < tempList.length;i++){
            x_data.push(tempList[i].name);
            y_data.push(tempList[i].value);
        }
        getBar(x_data,y_data);
    }

    $(document).ready(function () {
        closeLoading();
        loadData();
    });


    var barChart = echarts.init(document.getElementById('bar_photo_id'));//初始化echarts
    barChart.on('click',function(data){//echarts的点击事件
        console.log(data)
        echarts.dispose(document.getElementById("bar_photo_id"));//销毁当前echarts
        getDrillDownBar(data.name,true,"xy")//数据下钻
    });

    function getDrillDownBar(name,flag,type){//根据echarts点击事件,带入点击时的参数,查询下一数据;

        $.ajax({
            type : 'post',
            url : "${path}/getBarData?name="+name +"&type="+ type, //后端方法 返回List<Map<>>格式
            success: function (msg) {//如果成功,重新给echarts赋值

                var xAxis_data = [];
                var yAxis_data = [];
                for (var i = 0; i < msg.length; i++) {
                    xAxis_data.push(msg[i].XAXIS);
                    yAxis_data.push(msg[i].YAXIS);
                }
                console.log("xAxis_data:"+xAxis_data)
                console.log("yAxis_data:"+yAxis_data)
                getBar(yAxis_data, xAxis_data);//重新init echarts
                var barChart = echarts.init(document.getElementById('bar_photo_id'));
                if(flag) {//如果false success后不再监听点击事件,也就是最后一层点击了
                    barChart.on('click', function (data) { //再次监听新echarts的点击事件

                        echarts.dispose(document.getElementById("bar_photo_id"));//销毁echarts
                        getDrillDownBar(data.name, false,"xmlx")
                    })
                }
            }

        })


    }

   function getBar(x_data,y_data){
       /**柱状图*/
       var barChart = echarts.init(document.getElementById('bar_photo_id'));
       option = {
           title: {
               text: '主标题',
               subtext: '副标题'
           },
           tooltip: {
               trigger: 'axis',
               axisPointer: {
                   type: 'shadow'
               }
           },
           toolbox: {//工具栏。内置有导出图片,数据视图,动态类型切换,数据区域缩放,重置五个工具。
               show: true,//是否显示工具栏
               feature: {
                   dataView : {show: true, readOnly: false},
                   magicType : {show: true, type: ['line', 'bar']},//柱状图折线图切换
                   restore : {show: true},
                   saveAsImage : {show: true}
               }
           },
           legend: {
               data: ['应到人数', '实到人数']
           },
           grid: {
               left: '3%',
               right: '4%',
               bottom: '3%',
               containLabel: true
           },
           xAxis: {
                type: 'value',
                boundaryGap: [0, 0.01]
            },
            yAxis: {
                type: 'category',
                data: x_data,
                axisLabel: {
                    interval: 0,//坐标轴刻度标签的显示间隔
                    formatter: function(value) {//y轴文字长度超过8,则显示省略号
                        if (value.length > 8) {
                            return value.substring(0, 8) + "...";
                        } else {
                            return value;
                        }
                    }
                }
            },
           series: [
               {
                   name: '应到人数',
                   type: 'bar',
                   data: y_data,
               },
               {
                   name: '实到人数',
                   type: 'bar',
                   data: [10, 20]//这里的数据也可从后端返回
               }
           ]
       };
       barChart.setOption(option);
   }
</script>
</body>
</html>

主要思路就是,echarts点击事件->销毁echarts->创建新的echarts并替换数据

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值