vue+echarts 饼图legend文字超出省略,hover时显示tooltip及数据,取消点击事件

前言

提示:echarts饼图legend文字太长要截取,鼠标悬浮再显示所有的文字并显示数据比例。取消点击图例消失效果,保留hover显示tooltip


1.初始echarts

在这里插入图片描述
在这里插入图片描述
配置向代码如下(示例):

chartProductDataOption:{
                tooltip: {
                trigger: 'item',
                formatter: "{a} <br/>{b}: {c} ({d}%)"
                },
                color: [
                "#00a0e9",
                "#ff455b",
                "#f39800",
                "#62ff85"
                ],
                graphic:{       //图形中间文字
                    type:"text",
                    left:'25%',
                    top:"center",
                    style:{
                        text:"营 销\n数 据",
                        textAlign:"center",
                        fill:"#05f6ff",
                        fontSize:15
                    }
                },
                legend: {
                    orient: 'vertical',
                    type:'scroll',
                    x: 'right',
                    data:['产品一','产品二','产品三','产品四','产品五'],
                    formatter: function(name){
                    return name.length>8?name.substr(0,8)+"...":name;
                  },
                    tooltip: {
                        show: true,
                        trigger: 'item',
                    },    
                    textStyle:{
                        color:'	#FFFFFF',
                        // fontSize:10
                    },
                    itemGap:6
                },
                series: [
                {
                    name:'产品营销数据',
                    type:'pie',
                    radius: ['70%', '90%'],
                    center:['30%','50%'],
                    avoidLabelOverlap: false,
                    label: {
                        normal: {
                            show: false,
                            position: 'center'
                        },
                        emphasis: {
                            show: false,
                            textStyle: {
                                fontSize: '30',
                                fontWeight: 'bold'
                            }
                        }
                    },
                    
                    labelLine: {
                        normal: {
                            show: false
                        }
                    },
                    data:[  {value:30, name:'产品一'},
                        {value:40, name:'产品二'},
                        {value:40, name:'产品三'},
                        {value:40, name:'产品四'}
                        ]
                },
                {
                    name:'',
                    type:'pie',
                    radius: ['49%', '50%'],
                    center:['30%','50%'],
                    hoverAnimation:false,
                    avoidLabelOverlap: false,
                    label: {
                        normal: {
                            show: false,
                            position: 'center',
                            color: 'white',
                            formatter: ''
                        },
                        emphasis: {
                            show: false,
                        
                        }
                    },
                    labelLine: {
                        normal: {
                            show: false
                        }
                    },
                    data:[
                    {value:30, name:'产品一'},
                        {value:40, name:'产品二'},
                        {value:40, name:'产品三'},
                        {value:40, name:'产品四'}
                    ]
                }
                ]
            },

在这里插入图片描述
动态渲染数据
在这里插入图片描述

2.通过legend的formatter来设置文字显示长度,hover显示tooltip,设为true

在这里插入图片描述
tooltip要显示百分比数据需要通过formatter自己去算

代码如下(示例):

let that = this;
this.chartProductDataOption.legend.tooltip.formatter = function (tool) {
    let indexNum=0
    that.data.forEach(item => {
      if(item.proName === tool.name) indexNum = item.count
    })
    if(indexNum === 0){
    }else{
      return `${that.chartProductDataOption.series[0].name}</br>${tool.name}:${indexNum} (${(indexNum/that.numTotal*100).toFixed(2)}%)`
    }
}
computed:{
        numTotal:function(){
            let total = 0;
            for(let i=0;i<this.data.length;i++){
                total += parseInt(this.data[i].count);
            }
            return total;
        }
    }

3.取消legend点击事件,legend的selectedMode点击图例改变系列的显示状态。默认开启图例选择,可以设成 false 关闭。改为false会把hover事件也关闭,所以不行。可以利用legendselectchanged事件实现

代码如下(示例):

let that = this;
this.chartProductData.on('legendselectchanged', function(params) {
    // 前面配置项没定义selected,需先定义,否则找不到对象会报错
    that.chartProductDataOption.legend.selected ={};  
    that.chartProductDataOption.legend.selected[params.name] = true; // 相当于取消点击事件
    that.chartProductData.setOption(that.chartProductDataOption);
})

3.效果

在这里插入图片描述
legend图例hover的效果,百分比根据自己数据算出来的

要为echarts饼图legend添加点击事件,可以通过以下步骤实现: 1. 在初始化echarts,设置legend的selectedMode属性为true,开启图例选择功能。 2. 使用legendselectchanged事件监听图例的点击事件,当图例被点击触发相应的操作。 3. 在事件回调函数中,可以根据需要进行自定义操作,比如显示或隐藏相应的饼图数据系列。 引用中提到了在vue项目中引入echarts并添加点击事件的示例代码,可以参考这个示例来实现echarts饼图legend点击事件。在代码中,可以使用legendselectchanged事件来监听图例的点击事件,并在事件回调函数中根据需要进行相应的操作。 简单来说,可以通过设置selectedMode属性为true开启图例选择功能,并使用legendselectchanged事件来监听图例的点击事件,并在回调函数中添加自定义操作。 以下是一个示例代码: ```javascript // 初始化echarts let myChart = echarts.init(document.getElementById('chart')); // 设置legend的selectedMode为true let option = { legend: { selectedMode: true }, // 其他配置项... }; // 监听图例的点击事件 myChart.on('legendselectchanged', function (params) { // 根据params中的信息进行相应的操作 console.log(params); // 其他操作... }); // 设置echarts的配置项并渲染图表 myChart.setOption(option); ``` 通过以上步骤,就可以为echarts饼图legend添加点击事件,并在事件回调函数中进行相应的操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue+echarts 饼图legend文字超出省略hover显示tooltip数据取消点击事件](https://blog.csdn.net/dhlg123/article/details/122091889)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue 项目引入echarts 添加点击事件操作](https://download.csdn.net/download/weixin_38552292/12923404)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值