关于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绘制的图形,里面有最简单的矩形.圆形和三角形,也有各种常见的多边形,甚至是阴阳太极和 ...
随机推荐
- Python之机器学习K-means算法实现
一.前言: 今天在宿舍弄了一个下午的代码,总算还好,把这个东西算是熟悉了,还不算是力竭,只算是知道了怎么回事.今天就给大家分享一下我的代码.代码可以运行,运行的Python环境是Python3.6以上 ...
- 「PKUWC2018」Slay the Spire
题目链接 题意分析 这个题其实不是期望 就是一共有\(C_{2n}^m\)种情况 每一种情况选择\(k\)张牌 然后求最大攻击值的总和 我们考虑 当前抽出了选出了\(i\)张强化牌 \(m-i\)张攻 ...
- Centos7.4下安装Mysql8.0.15
一.下载Mysql Mysql下载地址:https://dev.mysql.com/downloads/mysql/ 二.卸载Linux自带的mariadb 安装Mysql之前需要卸载maria ...
- 2016级算法期末上机-I.难题·ModricWang's Fight with DDLs III
1126 ModricWang's Fight with DDLs III 思路 由于题目中已经说明了时间经过了正无穷,因此初始位置是不重要的,并且每条边.每个点的地位是均等的.因此到达每个点的概率就 ...
- knova绘制进度条
效果: 源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- Service Discovery protocol(SDP)
locating services provided by Volume 3 , Part C , section 8 2.1sdp client-server architecture 2.2 se ...
- wireshark 抓包
Wireshark(前称Ethereal)是一个网络数据包分析软件.网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据.Wireshark使用WinPCAP作为接口,直接 ...
- JavaScript定时器与执行机制
JavaScript动画中是必须使用到定时器的,这里做一个总结. var label = 'someLable'; console.time(label); console.timeEnd(label ...
- 比特 字节 兆 GB转换
bit:比特byte:拜特(字节) 1字节=8比特k:千KB:千字节 1KB = 1024 byteMB:兆字节GB:千兆字节 //少用 Kb:千比特 Mb:兆比特 Gb:千兆比特
- jenkins创建构建任务
构建项目类型 点击 Jenkins 首页 “创建一个新任务” 的链接, 输入任务名称 Jenkins 提供了六种类型的任务. 构建一个自由风格的软件项目 这是Jenkins的主要功能.Jenkins ...