关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)
最近项目中使用到echarts的树操作,对其中几点注意事项进行下总结。
效果图:


1、基础配置
options的配置如下:
{
tooltip: {
trigger: 'item',
triggerOn: 'mousemove'
},
series: [
{
type: 'tree',
data: data,
orient: 'TB',
symbolSize: 20,
label: {
normal: {
position: 'left',
verticalAlign: 'middle',
align: 'right',
fontSize: 12,
rotate: 45,
formatter (data) {
let { name } = data;
return name.length > 7
? name.substring(0, 7) + '...'
: name;
}
}
},
leaves: {
label: {
normal: {
position: 'right',
verticalAlign: 'middle',
align: 'left',
rotate: 45
}
}
},
itemStyle: {
normal: {
borderColor: '#1890ff'
}
},
expandAndCollapse: true,
animationDuration: 550,
animationDurationUpdate: 750
}
]
}
1.1 文字倾斜
在label选项设置rotate属性
label:{
rotate: 45
}
1.2 竖式显示
设置orient选项,LR表示横向,TB表示纵向
{
type: 'tree',
orient:'TB'
}
1.3 省略显示
当字数过多的时候显示...在label的formatter中进行设置
label:{
normal:{
formatter (data) {
formatter (data) {
let { name } = data;
return name.length > 7 ? name.substring(0, 7) + '...' : name;
}
}
}
2、交互说明
当点击【显示关系】的时候,显示图中的黄色边框节点。

看下关系数据:
节点【罗拉】的【朋友】是【quorra】和【heimayu】

我们需要做的就是抽取关系数据并塞入到原来树的节点中,分析逻辑并显示代码:
2.1 在原来树的节点中找到节点【罗拉】
// 获取接口返回的数据
let relations = res.conceptRelationDTOS;
// 对关系数组进行识别,this.relationTreeList是原来树的数据
relations.forEach((item, index) => {
this.findRelationNode(item, this.relationTreeList);
});
递归树数据找到节点
/**
* 在 list 中找到 dataId 并塞入关系relationDTO
* @param data 关系数据
* @param list 树数据
*/
findRelationNode (data, list) {
for (var i = 0, len = list.length; i < len; i++) {
let id = data.id;
if (id === list[i].id) {
this.setRelationNode(data, list[i]);
break;
} else if (list[i].children && list[i].children.length > 0) {
this.findRelationNode(data, list[i].children);
}
}
}
2.2 找到节点【罗拉】后,塞入孩子节点(关系)
/**
* 设置孩子节点
* @param data 关系数据
* @param node 塞入的节点
*/
setRelationNode (data, node) {
let { conceptRelations } = data;
if (!conceptRelations.length) {
return;
}
conceptRelations.forEach(item => {
let { relationName, concepts } = item;
node.children.push({
id: new Date().getTime() * Math.random(),
name: `关系:${relationName}`,
children: concepts,
itemStyle: {
borderColor: '#faa221' // 对节点颜色设置
}
});
});
}
这里要注意的是,保证设置的id的唯一性,不然会对树的显示渲染有影响
3、重绘缓存影响
echarts在内部渲染树的时候会合并数据,我们这里需要点击显示关系进行切换,数据也是不停的切换的,由于数据的耦合度较高导致树渲染的过程中出现了问题。这里我的解决方法是:
1、设置setOption的第二个参数true,第二个参数指的就是notMerger
this.treeChart.setOption(options,true)
2、在重新渲染前清除画布,方法是clear()
this.treeChart.clear();
亲测有效。
关于echarts绘制树图形的注意事项(文字倾斜、数据更新、缓存重绘问题等)的更多相关文章
- Canvas绘制不规则图形,实现可拖动,编辑--V1.0第一篇
目前的工作在做在线的标注工具,接触canvas一年了,各种绘制,基本上图像的交互canvas都可以完成,也写了几篇关于canvas的文章,遇到的问题也写博客上了,对于canvas有问题的朋友可以去看看 ...
- 10 个超炫绘制图表图形的 Javascript 插件【转载+整理】
原文地址 现在,有很多在线绘制图表和图形(Charts and Graphs)的 JavaScript 插件,这些插件还都是免费,以及图表库.这些插件大量出现的原因是基于一个事实:人们不再依赖于 Fl ...
- 基于easyUI实现权限管理系统(一)一—组织结构树图形
此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. organize.jsp:组织结构树的主界面 <!DOCTYPE html PUBLIC &quo ...
- 使用echarts绘制条形图和扇形图
使用echarts绘制条形图和扇形图 简单举例说明下echarts如何绘制条形图和扇形图 代码示例 <!doctype html> <html lang="en" ...
- 学习笔记:HTML5 Canvas绘制简单图形
HTML5 Canvas绘制简单图形 1.添加Canvas标签,添加id供js操作. <canvas id="mycanvas" height="700" ...
- css绘制特殊图形,meida查询,display inline-box间隙问题以及calc()函数
本文同时发表于本人个人网站 www.yaoxiaowen.com 距离上一篇文章已经一个月了,相比于写代码,发现写文章的确是更需要坚持的事情.言归正传,梳理一下这一个月来,在写ife任务时,有必要记录 ...
- 使用Ogre::ManualObject 绘制自定义图形
在ogre中如果需要进行自定义图形绘制可以使用ManualObject.例如绘制一个三角形的用法如下: SceneNode* pGridNode = m_pBaseNode->createChi ...
- 摘记 史上最强大的40多个纯CSS绘制的图形(一)
今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和网站小图标,真的非常强大,分享给大家. Square(正方 ...
- 40多个纯CSS绘制的图形
本文由码农网 – 陈少华原创,转载请看清文末的转载要求. 今天在国外的网站上看到了很多看似简单却又非常强大的纯CSS绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和 ...
随机推荐
- TSL协议升级导致的问题:caught when processing request: Received fatal alert: protocol_version
近日,公司升级TSL协议,禁用TSL1.0,导致原本好好的https接口,报以下错误: 2019-03-05 15:43:29 [org.apache.commons.httpclient.HttpM ...
- freemaker的函数使用
如下: <html> <body> <div class="container"> <h4>修改用户角色</h4> &l ...
- Python2获取网页标题
Python获取网页标题 使用Python2.x的urllib2和lxml,速度应该还快于BeautifulSoup4(话说回来,为什么大家都要用BS4呢?一个XPATH不就完了吗) 没有安装过的,用 ...
- 关于 maven 打包直接运行的 fat jar (uber jar) 时需要包含本地文件系统第三方 jar 文件的问题
关于maven打包fat jar (uber jar) 时需要包含本地文件系统第三方jar文件的问题,今天折腾了一整天.最后还是用了spring boot来做.下面是几篇关于打包的有参考价值的文章,以 ...
- SpringMVC初写(五)拦截器
在系统开发过程中,拦截器的使用可以使我们实现一些需求.如:登录认证,权限管理等,拦截器的工作核心就是将一些工作流程进行统一处理 拦截器和过滤器的区别: 过滤器过滤的是请求路径,拦截器拦截的各层方法的映 ...
- 剑指offer——面试题32.1:分行从上到下打印二叉树
void BFSLayer(BinaryTreeNode* pRoot) { if(pRoot==nullptr) return; queue<BinaryTreeNode*> pNode ...
- mono 的System.Data.SqlClient小记录
厦门-JuzzPig() 15:33:36System.Data.SqlClient 不科学的广州-PC286() 15:33:42webservice 返回的是 xml厦门-JuzzPig() ...
- hibernate的AnnotationHelloWorld
来龙去脉: 最开始sun这个土鳖设计了EJB2.0.EJB2.1那个时代.后来有人发现设计的很烂,不好用,就设计了hibernate,,人们发现用hibernate反而比EJB2.0.2.1好,hib ...
- java中Filter过滤器处理中文乱码的方法
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...
- LINUX 查找替换命令 总结
find /var/ -name "*.php" > /home/tmp 在/var/目录下查找 所有以.php后缀结尾的文件 结果很多,就 > 输出结果到/home ...