echarts树图

作者用ECharts做树图数周,记录了相关特性与问题。特性包括绑定事件方法、事件执行顺序等;问题涉及给树的label加点击事件、控制弹出框显隐、动态设置树图高度和宽度、改变图大小、设置节点样式、控制节点展开收起及动态加载数据等。

用echarts做了两周(算上之前应该是4周)的树图,记录一下遇到的一些特性和问题。

特性:

1、echarts中绑定事件,通过 on方法

例如:绑定click方法

myChart.on('click', function (params) {
    console.log(params);
});

2、echarts的 on方法 先于 DOM点击事件执行。

3、echarts实例的 _chartsViews[0]._data 有很多有用的属性。

4、改变图表尺寸,在容器大小发生改变时需要手动调用:resize(width?: number|string, height?: number|string, silent?: boolean)。silent:是否禁止抛出事件。默认为 false

5、echarts的mousedown事件 先于 render函数执行,click事件后于render渲染函数执行。

问题:

1、给树的label增加点击事件

开始需求没有对树图的 symbol 节点的要求,于是把 symbol 节点改为方形,加上padding,背景色等,放置在文字后面,当点击文字时通过echarts的 on方法 实现具体点击事件。

2、点击文字( symbol节点 )弹出弹出框,点击其他地方,弹出框消失

通过控制 2 个boolean值(例:showBox 和 clickBlank)来控制弹出框的消失与显现——showBox :控制弹出框显现与消失; clickBlank:控制showBox值的改变。

clickBlank初始值设置为true,当点击到节点将clickBlank设置为false,整个echarts画布添加点击事件:当点击画布,若 clickBlank 为false,即点击到的空白处,则将showBox 置为false,若 clickBlank 为true,即点击的节点,则将 clickBlank 置为true。因为echarts的 on方法 先于 DOM点击事件执行,所以可以实现效果。

...
this.myChart.on('click', function (params) { //使用vue
    this.clickBlank = false;
});
...
DomClick(){
    if(this.clickBlank){
        this.showBox = false;
    }else{
        this.clickBlank = true;
    }
}

3、不同节点个数以动态高度和宽度展示

高度:echarts实例的 _chartsViews[0]._data._graphicEls 数组中的值为 undefined 时,此节点是收起的。循环找到当前未收起的节点数 * 一个节点大致占的高度,设置树图的高度,则实现动态的高度了(不是很准确)。

宽度:echarts实例的 _chartsViews[0]._data.tree._nodes的 depth 是节点的层数,通过循环找到当前未收起的节点的最深层数 * 每层节点大致占的宽度来设置树图的宽度。

想要每次收起展开都动态的高度、宽度显示,则在on方法点击事件时计算一次,然后 调用echarts的 resize() 方法改变绘图大小。

4、每次浏览器窗口大小发生变化,改变图大小

window.addEventListener('resize',()=>{this.myEcharts.resize();});

5、个别节点不同样式

利用echarts的富文本标签。官网讲解地址

6、控制展开收起:仅部分节点可点击时展开收起

on方法的函数参数param的dataIndex是当前点击(触发)的节点编号,echarts实例的 _chartsViews[0]._data.tree._nodes的 isExpand 控制节点展开收起。使mousedown的时候isExpand变为相反值,则click时再变为相反值时就不会收起展开了。

this.myChart.on('mousedown',(param)=>{
    let nodeIndex = param.dataIndex;
    if(不是可展开收起的节点){
        this.myChart._chartsViews[0]._data.tree._nodes[nodeIndex] =  !this.myChart._chartsViews[0]._data.tree._nodes[nodeIndex]; 
    }
})

7、点击节点动态加载新数据渲染新的子节点,并展开新节点

需要点击的节点有children属性。collapsed 属性可控制展开收起,false:展开。

this.myChart.on('mousedown',(param)=>{
    ...//从后台获取数据
    param.data.children.push(新数据);
    param.data.collapsed = false; 
    ...//动态高度宽度
    this.myChart.resize();
}

 

<think>首先,用户的问题是关于Echarts的使用方法、示例及相关特性。用户引用了三篇资料:[^1]、[^2]和[^3],这些内容提到了Echarts的可定制性、各种表类型包括、以及的样式设置。 我的任务是: - 参考系统级指令:使用中文回答,确保数学表达式正确格式(但这里可能不涉及),生成相关问题,在引用末尾添加引用标识。 - 回答结构清晰,逐步解决问题。 - 基于用户的查询和提供的引用,提供关于Echarts的信息。 关键点: - 用户想了解Echarts的使用方法、示例和特性。 - 提供的引用中: - [^1] 强调Echarts的高度可定制化。 - [^2] 提到Echarts提供(treemap)以及其他表类型。 - [^3] 详细描述了的设置过程,包括连接线样式、节点样式、动画等。 所以,我需要综合这些信息,构建一个清晰的回答。 回答结构: 1. **引言**:简要介绍Echarts是什么。 2. **使用方法**:解释如何使用Echarts创建,包括基本步骤。 3. **示例**:提供一个简单的代码示例,展示如何配置。 4. **相关特性**:讨论Echarts的特性,如可定制化、数据格式支持、交互功能等。 5. **生成相关问题**:按照指令,在回答末尾添加相关问题。 6. **引用**:在引用段落末尾添加引用标识,例如[^1]。 确保使用Markdown格式: - 独立公式用$$...$$,但这里可能不需要。 - 行内数学表达式用$...$,但问题不涉及数学。 - 代码块用```language ... ```格式。 步骤: 1. **引言**:介绍Echarts中的位置和作用。用于可视化层次结构数据。 2. **使用方法**: - 参考[^3],描述设置的基本步骤: - 定义option对象。 - 指定series类型为'tree'。 - 配置data、label、lineStyle等。 - 提到数据格式:Echarts支持多种数据格式,无需转换[^2]。 3. **示例**: - 提供一个简化版的配置代码,基于[^3]的内容。 - 使用JavaScript代码块。 4. **相关特性**: - 高度可定制化[^1]:可以调整节点、连接线、标签等。 - 交互功能:如展开/折叠子[^3]。 - 支持动画、鼠标悬停效果。 5. **相关问题**:生成2-3个相关问题,如关于优化、应用场景等。 6. **引用**:在描述中自然地添加[^1]、[^2]、[^3]。 完整回答大纲: - 开头:Echarts是用于可视化层次数据的表类型。 - 使用方法:简述步骤。 - 示例:代码示例。 - 特性:可定制性、数据支持、交互等。 - 结束:相关问题。 生成相关问题: 1. 如何优化Echarts的性能? 2. Echarts有哪些常见应用场景? 3. 如何自定义的样式以满足特定需求? 确保回答真实可靠:基于引用和一般知识。 </think>### Echarts的使用方法、示例及相关特性 Echarts(Tree Diagram)是一种用于可视化层次结构数据的表类型,常用于展示组织结构、文件目录、家族关系等状数据模型。Echarts具有高度可定制化和丰富的交互功能,下面我将逐步介绍其使用方法、提供一个简单示例,并总结关键特性。 #### 使用方法 使用Echarts创建的基本步骤如下: 1. **引入Echarts库**:在HTML文件中添加Echarts的JavaScript库。 2. **定义DOM容器**:创建一个div元素作为表的容器。 3. **配置option对象**:这是核心部分,需要指定`series`类型为`'tree'`,并设置数据源、节点样式、连接线样式等。 - **数据格式**:支持JSON或其他结构化数据,无需额外转换[^2]。数据节点通常包含`name`(节点名称)和`children`(子节点)。 - **样式定制**:可通过`lineStyle`设置连接线样式(如颜色、宽度),`itemStyle`设置节点样式(如填充色、边框),`label`设置标签样式。 - **交互功能**:使用`expandAndCollapse`控制节点展开/折叠,`emphasis`设置鼠标悬停高亮效果。 4. **初始化表并渲染**:基于option对象生成表。 #### 示例 以下是一个简化版的Echarts代码示例,展示了一个层次结构(如公司部门)。代码基于引用内容[^3]调整而成,核心配置包括节点样式、连接线、标签位置和动画。 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Echarts示例</title> <script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script> </head> <body> <div id="treeChart" style="width: 800px; height: 600px;"></div> <script type="text/javascript"> // 初始化表 var chartDom = document.getElementById('treeChart'); var myChart = echarts.init(chartDom); // 配置option对象 var option = { tooltip: { trigger: 'item' }, // 提示框 series: [{ type: 'tree', data: [ // 数据源 { name: 'Root', children: [ { name: 'Child 1', children: [{ name: 'Grandchild 1' }] }, { name: 'Child 2', children: [{ name: 'Grandchild 2' }] } ] } ], lineStyle: { color: '#0ff', // 连接线颜色(蓝色) width: 2 // 连接线宽度 }, itemStyle: { color: '#41B883', // 节点填充色(绿色) borderColor: '#000', // 边框颜色(黑色) borderWidth: 1, // 边框宽度 borderType: 'solid' // 边框类型 }, label: { position: 'left', // 标签位置 verticalAlign: 'middle', // 垂直对齐 align: 'right', // 水平对齐 fontSize: 16 // 字体大小 }, emphasis: { // 鼠标悬停高亮 focus: 'descendant' // 高亮所有子孙节点 }, symbolSize: 20, // 节点大小 expandAndCollapse: true, // 启用节点展开/折叠(默认true) animationDuration: 550, // 初始动画时长 animationDurationUpdate: 750 // 更新动画时长 }] }; // 渲染表 myChart.setOption(option); </script> </body> </html> ``` **效果说明**:运行此代码后,您将看到一个基本的,根节点连接两个子节点(Child 1和Child 2),每个子节点又有孙子节点。鼠标悬停节点时会高亮相关子,并显示提示框。通过点击节点可以展开/折叠子[^3]。 #### 相关特性 Echarts的核心特性包括: 1. **高度可定制化**:几乎每个元素(如节点、连接线、标签)都可精细调整。例如,可通过`itemStyle`自定义节点颜色,或通过`lineStyle`修改连接线样式,满足品牌或UI设计要求[^1]。 2. **支持多种数据格式**:直接使用JSON、数组等常见格式,无需数据转换[^2],降低了开发复杂度。 3. **丰富的交互功能**: - **展开/折叠**:通过`expandAndCollapse`参数控制节点交互,避免节点过多时遮挡问题(默认开启,可设置为`false`禁用)[^3]。 - **动画效果**:内置动画(如`animationDuration`),提升用户体验。 - **鼠标悬停**:`emphasis`配置支持高亮节点或子,便于数据探索。 4. **与其他表混搭**:Echarts支持与折线、柱状等混合使用,实现多维数据可视化[^2]。 5. **响应式设计**:表能自适应容器大小,适合嵌入Web应用。 这些特性使Echarts广泛应用于BI分析、项目管理工具和数据仪表盘中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值