var data = {
"name": "张三",
"children": [
{
"name": "李四",
"children": [
{
"name": "converters",
"children": [
{"name": "Converters", "value": 721},
{"name": "DelimitedTextConverter", "value": 4294}
]
},
{
"name": "DataUtil",
"value": 3322
}
]
},
{
"name": "张三",
"children": [
{"name": "DirtySprite", "value": 8833},
{"name": "LineSprite", "value": 1732},
{"name": "RectSprite", "value": 3623}
]
},
{
"name": "{{受众name}}",
"children": [
{"name": "FlareVis", "value": 4116}
]
},
{
"name": "query",
"children": [
{"name": "AggregateExpression", "value": 1616},
{"name": "And", "value": 1027},
{"name": "Arithmetic", "value": 3891},
{"name": "Average", "value": 891},
{"name": "BinaryExpression", "value": 2893},
{"name": "Comparison", "value": 5103},
{"name": "CompositeExpression", "value": 3677},
{"name": "Count", "value": 781},
{"name": "DateUtil", "value": 4141},
{"name": "Distinct", "value": 933},
{"name": "Expression", "value": 5130},
{"name": "ExpressionIterator", "value": 3617},
{"name": "Fn", "value": 3240},
{"name": "If", "value": 2732},
{"name": "IsA", "value": 2039},
{"name": "Literal", "value": 1214},
{"name": "Match", "value": 3748},
{"name": "Maximum", "value": 843},
{
"name": "methods",
"children": [
{"name": "add", "value": 593},
{"name": "and", "value": 330},
{"name": "average", "value": 287},
{"name": "count", "value": 277},
{"name": "distinct", "value": 292},
{"name": "div", "value": 595},
{"name": "eq", "value": 594},
{"name": "fn", "value": 460},
{"name": "gt", "value": 603},
{"name": "gte", "value": 625},
{"name": "iff", "value": 748},
{"name": "isa", "value": 461},
{"name": "lt", "value": 597},
{"name": "lte", "value": 619},
{"name": "max", "value": 283},
{"name": "min", "value": 283},
{"name": "mod", "value": 591},
{"name": "mul", "value": 603},
{"name": "neq", "value": 599},
{"name": "not", "value": 386},
{"name": "or", "value": 323},
{"name": "orderby", "value": 307},
{"name": "range", "value": 772},
{"name": "select", "value": 296},
{"name": "stddev", "value": 363},
{"name": "sub", "value": 600},
{"name": "sum", "value": 280},
{"name": "update", "value": 307},
{"name": "variance", "value": 335},
{"name": "where", "value": 299},
{"name": "xor", "value": 354},
{"name": "x_x", "value": 264},
{"name": "add", "value": 593},
{"name": "and", "value": 330},
{"name": "average", "value": 287},
{"name": "count", "value": 277},
{"name": "distinct", "value": 292},
{"name": "div", "value": 595},
{"name": "eq", "value": 594},
{"name": "fn", "value": 460},
{"name": "gt", "value": 603},
{"name": "gte", "value": 625},
{"name": "iff", "value": 748},
{"name": "isa", "value": 461},
{"name": "lt", "value": 597},
{"name": "lte", "value": 619},
{"name": "max", "value": 283},
{"name": "min", "value": 283},
{"name": "mod", "value": 591},
{"name": "mul", "value": 603},
{"name": "neq", "value": 599},
{"name": "not", "value": 386},
{"name": "or", "value": 323},
{"name": "orderby", "value": 307},
{"name": "range", "value": 772},
{"name": "select", "value": 296},
{"name": "stddev", "value": 363},
{"name": "sub", "value": 600},
{"name": "sum", "value": 280},
{"name": "update", "value": 307},
{"name": "variance", "value": 335},
{"name": "where", "value": 299},
{"name": "xor", "value": 354},
{"name": "x_x", "value": 264},
{"name": "add", "value": 593},
{"name": "and", "value": 330},
{"name": "average", "value": 287},
{"name": "count", "value": 277},
{"name": "distinct", "value": 292},
{"name": "div", "value": 595},
{"name": "eq", "value": 594},
{"name": "fn", "value": 460},
{"name": "gt", "value": 603},
{"name": "gte", "value": 625},
{"name": "iff", "value": 748},
{"name": "isa", "value": 461},
{"name": "lt", "value": 597},
{"name": "lte", "value": 619},
{"name": "max", "value": 283},
{"name": "min", "value": 283},
{"name": "mod", "value": 591},
{"name": "mul", "value": 603},
{"name": "neq", "value": 599},
{"name": "not", "value": 386},
{"name": "or", "value": 323},
{"name": "orderby", "value": 307},
{"name": "range", "value": 772},
{"name": "select", "value": 296},
{"name": "stddev", "value": 363},
{"name": "sub", "value": 600},
{"name": "sum", "value": 280},
{"name": "update", "value": 307},
{"name": "variance", "value": 335},
{"name": "where", "value": 299},
{"name": "xor", "value": 354},
{"name": "x_x", "value": 264}
]
},
{"name": "Minimum", "value": 843},
{"name": "Not", "value": 1554},
{"name": "Or", "value": 970},
{"name": "Query", "value": 13896},
{"name": "Range", "value": 1594},
{"name": "StringUtil", "value": 4130},
{"name": "Sum", "value": 791},
{"name": "Variable", "value": 1124},
{"name": "Variance", "value": 1876},
{"name": "Xor", "value": 1101}
]
},
{
"name": "scale",
"children": [
{"name": "IScaleMap", "value": 2105},
{"name": "LinearScale", "value": 1316},
{"name": "LogScale", "value": 3151},
{"name": "OrdinalScale", "value": 3770},
{"name": "QuantileScale", "value": 2435},
{"name": "QuantitativeScale", "value": 4839},
{"name": "RootScale", "value": 1756},
{"name": "Scale", "value": 4268},
{"name": "ScaleType", "value": 1821},
{"name": "TimeScale", "value": 5833}
]
}
]
};
option = {
// backgroundColor:'#fff',
tooltip: {
trigger: 'item',
triggerOn: 'mousemove'
},
series:[
{
type: 'tree',
id: 0,
name: 'tree1',
data: [data],
top: 32,
left: 64,
bottom: 32,
right: 160,
// roam: 'move',
symbolSize: 7,
// edgeShape: 'polyline',
orient: 'LR',//'LR', 'RL', 'TB', 'BT'
// layout: 'radial', //'orthogonal', 'radial'
edgeForkPosition: '63%',
expandAndCollapse: true,
initialTreeDepth: 1,
lineStyle: {
width: 2
},
label: {
// backgroundColor: '#fff',
position: 'left',
verticalAlign: 'middle',
align: 'right'
},
leaves: {
label: {
position: 'right',
verticalAlign: 'middle',
align: 'left'
}
},
expandAndCollapse: true,
animationDuration: 550,
animationDurationUpdate: 750
}
]
};
// 获得深度映射
function getDepthMap(arr) {
let startIndex = 0;
function getDepthMapInner(data, deptMap, level) {
if (!data) return;
deptMap = deptMap||{};
level = level||1;
for(let item of data) {
deptMap[++startIndex] = level;
item.id = startIndex;
getDepthMapInner(item.children, deptMap, level+1);
}
return deptMap;
}
return getDepthMapInner(arr);
}
// 拉平数据
function flatten (data) {
return data.reduce((arr, {name, value, children = []}) =>
arr.concat([{name, value}], flatten(children)), [])
}
// 根据echarts显示树状结构,计算各层级的数量
function maxDept(nodeArr, deptMap) {
let deptArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for(let i = 1; i<nodeArr.length; i++) {
if(nodeArr[i]) {
deptArr[deptMap[i]]++;
}
}
return Math.max(...deptArr);
}
let deptMap = getDepthMap([data]);
let dataArr = flatten([data]);
//myChart.resize({width:1112})
// myChart.on('onmousewheel', e=>{alert(e)});
// function eConsole(param) {
// alert('Zoom: ' + param);
// }
/**
* 解决JS数字精度问题
**/
function eqs (n1, n2) {
return Math.abs(n1 - n2) < Number.EPSILON
}
myChart.getZr().on('click', function(param){
console.log(param);
let els = myChart._chartsViews[0]._data._graphicEls;
if (!param.target) { return; }
let shape = param.target.shape;
let p1 = [-1, -1], p2 = [-1, -1];
if (shape.hasOwnProperty('childPoints')) { // 折线
p1 = shape.parentPoint;
} else if (shape.hasOwnProperty('x1')) { // 曲线
p1 = [shape.x1, shape.y1];
p2 = [shape.x2, shape.y2];
}
for(let i in els) {
let el = els[i];
if (eqs(el.position[0], p1[0]) && eqs(el.position[1], p1[1])) {
console.log('初始节点'+JSON.stringify(dataArr[i-1]));
}
if (eqs(el.position[0], p2[0]) && eqs(el.position[1], p2[1])) {
console.log('终止节点'+JSON.stringify(dataArr[i-1]));
}
}
// console.log(els);
})
myChart.on('click', function(param){
console.log(myChart._chartsViews[0]._data._rawData._data);
console.log(param);
let pt = myChart._chartsViews[0]._data._graphicEls[param.dataIndex];
console.log(pt);
opt = {series:{center: pt}}
// myChart.setOption(opt);
// console.log(myChart._chartsViews[0]._data._graphicEls);
let dept = maxDept(myChart._chartsViews[0]._data._graphicEls, deptMap);
let calcHeight = 25*dept;
// console.log('Max Depth: ' + dept);
myChart.resize({width:1112, height:calcHeight<800?800:calcHeight})
})
// myChart.getZr().on('mousewheel', function (e) {
// console.log(myChart._chartsViews[0]._data._graphicEls);
// let dept = maxDept(myChart._chartsViews[0]._data._graphicEls, deptMap);
// let calcHeight = 25*dept;
// console.log('Max Depth: ' + dept);
// myChart.resize({width:1112, height:calcHeight<800?800:calcHeight})
// })
// myChart.showLoading();
// setTimeout(function() {myChart.hideLoading();}, 3000);