Echarts 问题解决 —— div+css 自定义图例 关联 echarts图表

目录

场景再现

问题解决

示例演示


场景再现

  • 设计稿如下图:
  • 几个难点:
  1. 图例:经过官网查询,不能给每个图例单独设置如图所示的底边,只能定义图例整体最外层的边框
  2. 外面的圆环
  3. 环状之间的间隙

问题解决

  • 上述图例并非通过 echarts图表 进行设置,而是编写了 html、css 进行了设置,并将其关联 echarts图表
  • 外面的圆环,是给 echarts图表容器,添加背景实现
  • 环状之间的间隙,是通过设置每个扇形之间的边框宽度及颜色,将之设置为背景色,模拟间隙

示例演示

  • html/css 部分:
<!-- 环状饼图 -->
<div id="chuli-tongji" class="echarts-bg" style="widows: 300px;height: 250px"></div>
<!-- 模拟图例 -->
        <div class="legend-outer">
            <div class="legend-box">
                <span class="circle"></span>
                <span class="legend-text">工业污染源</span>
                <span class="legend-num">23.5</span>
                <span class="legend-text">%</span>
            </div>
            <div class="legend-box">
                <span class="circle"></span>
                <span class="legend-text">污水处理厂</span>
                <span class="legend-num">23.5</span>
                <span class="legend-text">%</span>
            </div>
            ...
        </div>
  • js 部分:
       // 存储刚刚实例化的图表
        var chartOneDom = drawPieOne();
        // 调用点击图标高亮的方法
        highlightEchart('.legend-box', chartOneDom, 0);

        /*
         * 点击图例高亮图标
         * @parms <object> tar:被点击的图例 dom对象
         * @parms <object> tarChart:echarts实例化的 dom对象
         */
        // @parms <Array> pieStatus:存在多个饼图的状态下,记录饼图高亮状态下的下标值 
        // 第一个元素是饼图一高亮状态下的下标值,第二个元素是饼图二高亮状态下的下标值
        var pieStatus = [0, 0]

        function highlightEchart(tar, tarChart, pieIndex) {
            // 图例点击后触发的事件
            $(tar).click(function() {
                // 存储点击的数据块的下标
                pieStatus[pieIndex] = $(this).index()
                    // 非选中项数组
                var serLength = [];
                // 对选中项数组初始化
                for (let i = 0; i < $(tar).length; i++) {
                    serLength.push(i);
                }
                // 获得除了选中项的下标数组
                serLength.splice(serLength.indexOf($(this).index()), 1);
                // 选中项高亮
                tarChart.dispatchAction({
                    type: 'highlight',
                    dataIndex: pieStatus[pieIndex]
                });
                // 非选中项取消高亮s
                tarChart.dispatchAction({
                    type: 'downplay',
                    dataIndex: serLength
                });
            })
        }

        /*
         * 绘制环状图表
         * @return 返回 echarts实例化的 dom对象
         */
        function drawPieOne() {
            // 1. 实例化对象
            var chuLiTongJi = echarts.init(document.querySelector("#chuli-tongji"));
            // 2. 指定配置项和数据
            var option = {
                ...
                series: [{
                    ...
                    // 设置边框,实现饼图扇形之间的间隔效果
                    itemStyle: {
                        normal: {
                            borderWidth: 5,
                            borderColor: '#333',
                        }
                    },
                }, ],
            };
            // 3. 把配置项给实例对象
            chuLiTongJi.setOption(option);

            // 4. 设置默认高亮
            chuLiTongJi.dispatchAction({
                type: 'highlight',
                dataIndex: 0
            });
            chuLiTongJi.on('mouseover', function(e) {
                // 当检测到鼠标悬停事件,取消默认选中高亮
                chuLiTongJi.dispatchAction({
                    type: 'downplay',
                    dataIndex: pieStatus[0]
                });
                pieStatus[0] = e.dataIndex;
                // 高亮显示悬停的那块
                chuLiTongJi.dispatchAction({
                    type: 'highlight',
                    dataIndex: e.dataIndex
                });
            });

            // 5. 让图表跟随屏幕自动的去适应
            window.addEventListener("resize", function() {
                chuLiTongJi.resize();
            });

            // 6. 最终返回实例化的对象
            return chuLiTongJi;
        }

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要实现echarts双层图例,你可以按照以下步骤进行操作: 1. 在HTML模板中添一个盒子,用于放置图表: ```html <div class="chartMachineStyle" ref="chartMachine"></div> ``` 2. 在CSS样式中设置盒子的尺寸: ```css .chartMachineStyle { height: 200px; width: 355px; } ``` 3. 在JavaScript中使用echarts库创建双层图例的环形: ```javascript // 引入echarts库 import echarts from 'echarts'; // 获取盒子元素 const chartMachine = document.querySelector('.chartMachineStyle'); // 初始化图表 const myChart = echarts.init(chartMachine); // 配置图表选项 const option = { title: { text: '双层图例', x: 'center' }, legend: { data: ['图例1', '图例2'], bottom: 10 }, series: [ { name: '图例1', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold' } }, labelLine: { show: false }, data: [ { value: 335, name: '数据1' }, { value: 310, name: '数据2' }, { value: 234, name: '数据3' }, { value: 135, name: '数据4' }, { value: 1548, name: '数据5' } ] }, { name: '图例2', type: 'pie', radius: ['30%', '40%'], avoidLabelOverlap: false, label: { show: false, position: 'center' }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold' } }, labelLine: { show: false }, data: [ { value: 335, name: '数据1' }, { value: 310, name: '数据2' }, { value: 234, name: '数据3' }, { value: 135, name: '数据4' }, { value: 1548, name: '数据5' } ] } ] }; // 使用配置项显示图表 myChart.setOption(option); ``` 这样就可以实现一个带有双层图例的环形了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lyrelion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值