1. var data = {
    2. "name": "张三",
    3. "children": [
    4. {
    5. "name": "李四",
    6. "children": [
    7. {
    8. "name": "converters",
    9. "children": [
    10. {"name": "Converters", "value": 721},
    11. {"name": "DelimitedTextConverter", "value": 4294}
    12. ]
    13. },
    14. {
    15. "name": "DataUtil",
    16. "value": 3322
    17. }
    18. ]
    19. },
    20. {
    21. "name": "张三",
    22. "children": [
    23. {"name": "DirtySprite", "value": 8833},
    24. {"name": "LineSprite", "value": 1732},
    25. {"name": "RectSprite", "value": 3623}
    26. ]
    27. },
    28. {
    29. "name": "{{受众name}}",
    30. "children": [
    31. {"name": "FlareVis", "value": 4116}
    32. ]
    33. },
    34. {
    35. "name": "query",
    36. "children": [
    37. {"name": "AggregateExpression", "value": 1616},
    38. {"name": "And", "value": 1027},
    39. {"name": "Arithmetic", "value": 3891},
    40. {"name": "Average", "value": 891},
    41. {"name": "BinaryExpression", "value": 2893},
    42. {"name": "Comparison", "value": 5103},
    43. {"name": "CompositeExpression", "value": 3677},
    44. {"name": "Count", "value": 781},
    45. {"name": "DateUtil", "value": 4141},
    46. {"name": "Distinct", "value": 933},
    47. {"name": "Expression", "value": 5130},
    48. {"name": "ExpressionIterator", "value": 3617},
    49. {"name": "Fn", "value": 3240},
    50. {"name": "If", "value": 2732},
    51. {"name": "IsA", "value": 2039},
    52. {"name": "Literal", "value": 1214},
    53. {"name": "Match", "value": 3748},
    54. {"name": "Maximum", "value": 843},
    55. {
    56. "name": "methods",
    57. "children": [
    58. {"name": "add", "value": 593},
    59. {"name": "and", "value": 330},
    60. {"name": "average", "value": 287},
    61. {"name": "count", "value": 277},
    62. {"name": "distinct", "value": 292},
    63. {"name": "div", "value": 595},
    64. {"name": "eq", "value": 594},
    65. {"name": "fn", "value": 460},
    66. {"name": "gt", "value": 603},
    67. {"name": "gte", "value": 625},
    68. {"name": "iff", "value": 748},
    69. {"name": "isa", "value": 461},
    70. {"name": "lt", "value": 597},
    71. {"name": "lte", "value": 619},
    72. {"name": "max", "value": 283},
    73. {"name": "min", "value": 283},
    74. {"name": "mod", "value": 591},
    75. {"name": "mul", "value": 603},
    76. {"name": "neq", "value": 599},
    77. {"name": "not", "value": 386},
    78. {"name": "or", "value": 323},
    79. {"name": "orderby", "value": 307},
    80. {"name": "range", "value": 772},
    81. {"name": "select", "value": 296},
    82. {"name": "stddev", "value": 363},
    83. {"name": "sub", "value": 600},
    84. {"name": "sum", "value": 280},
    85. {"name": "update", "value": 307},
    86. {"name": "variance", "value": 335},
    87. {"name": "where", "value": 299},
    88. {"name": "xor", "value": 354},
    89. {"name": "x_x", "value": 264},
    90. {"name": "add", "value": 593},
    91. {"name": "and", "value": 330},
    92. {"name": "average", "value": 287},
    93. {"name": "count", "value": 277},
    94. {"name": "distinct", "value": 292},
    95. {"name": "div", "value": 595},
    96. {"name": "eq", "value": 594},
    97. {"name": "fn", "value": 460},
    98. {"name": "gt", "value": 603},
    99. {"name": "gte", "value": 625},
    100. {"name": "iff", "value": 748},
    101. {"name": "isa", "value": 461},
    102. {"name": "lt", "value": 597},
    103. {"name": "lte", "value": 619},
    104. {"name": "max", "value": 283},
    105. {"name": "min", "value": 283},
    106. {"name": "mod", "value": 591},
    107. {"name": "mul", "value": 603},
    108. {"name": "neq", "value": 599},
    109. {"name": "not", "value": 386},
    110. {"name": "or", "value": 323},
    111. {"name": "orderby", "value": 307},
    112. {"name": "range", "value": 772},
    113. {"name": "select", "value": 296},
    114. {"name": "stddev", "value": 363},
    115. {"name": "sub", "value": 600},
    116. {"name": "sum", "value": 280},
    117. {"name": "update", "value": 307},
    118. {"name": "variance", "value": 335},
    119. {"name": "where", "value": 299},
    120. {"name": "xor", "value": 354},
    121. {"name": "x_x", "value": 264},
    122. {"name": "add", "value": 593},
    123. {"name": "and", "value": 330},
    124. {"name": "average", "value": 287},
    125. {"name": "count", "value": 277},
    126. {"name": "distinct", "value": 292},
    127. {"name": "div", "value": 595},
    128. {"name": "eq", "value": 594},
    129. {"name": "fn", "value": 460},
    130. {"name": "gt", "value": 603},
    131. {"name": "gte", "value": 625},
    132. {"name": "iff", "value": 748},
    133. {"name": "isa", "value": 461},
    134. {"name": "lt", "value": 597},
    135. {"name": "lte", "value": 619},
    136. {"name": "max", "value": 283},
    137. {"name": "min", "value": 283},
    138. {"name": "mod", "value": 591},
    139. {"name": "mul", "value": 603},
    140. {"name": "neq", "value": 599},
    141. {"name": "not", "value": 386},
    142. {"name": "or", "value": 323},
    143. {"name": "orderby", "value": 307},
    144. {"name": "range", "value": 772},
    145. {"name": "select", "value": 296},
    146. {"name": "stddev", "value": 363},
    147. {"name": "sub", "value": 600},
    148. {"name": "sum", "value": 280},
    149. {"name": "update", "value": 307},
    150. {"name": "variance", "value": 335},
    151. {"name": "where", "value": 299},
    152. {"name": "xor", "value": 354},
    153. {"name": "x_x", "value": 264}
    154. ]
    155. },
    156. {"name": "Minimum", "value": 843},
    157. {"name": "Not", "value": 1554},
    158. {"name": "Or", "value": 970},
    159. {"name": "Query", "value": 13896},
    160. {"name": "Range", "value": 1594},
    161. {"name": "StringUtil", "value": 4130},
    162. {"name": "Sum", "value": 791},
    163. {"name": "Variable", "value": 1124},
    164. {"name": "Variance", "value": 1876},
    165. {"name": "Xor", "value": 1101}
    166. ]
    167. },
    168. {
    169. "name": "scale",
    170. "children": [
    171. {"name": "IScaleMap", "value": 2105},
    172. {"name": "LinearScale", "value": 1316},
    173. {"name": "LogScale", "value": 3151},
    174. {"name": "OrdinalScale", "value": 3770},
    175. {"name": "QuantileScale", "value": 2435},
    176. {"name": "QuantitativeScale", "value": 4839},
    177. {"name": "RootScale", "value": 1756},
    178. {"name": "Scale", "value": 4268},
    179. {"name": "ScaleType", "value": 1821},
    180. {"name": "TimeScale", "value": 5833}
    181. ]
    182. }
    183. ]
    184. };
    185. option = {
    186. // backgroundColor:'#fff',
    187. tooltip: {
    188. trigger: 'item',
    189. triggerOn: 'mousemove'
    190. },
    191. series:[
    192. {
    193. type: 'tree',
    194. id: 0,
    195. name: 'tree1',
    196. data: [data],
    197. top: 32,
    198. left: 64,
    199. bottom: 32,
    200. right: 160,
    201. // roam: 'move',
    202. symbolSize: 7,
    203. // edgeShape: 'polyline',
    204. orient: 'LR',//'LR', 'RL', 'TB', 'BT'
    205. // layout: 'radial', //'orthogonal', 'radial'
    206. edgeForkPosition: '63%',
    207. expandAndCollapse: true,
    208. initialTreeDepth: 1,
    209. lineStyle: {
    210. width: 2
    211. },
    212. label: {
    213. // backgroundColor: '#fff',
    214. position: 'left',
    215. verticalAlign: 'middle',
    216. align: 'right'
    217. },
    218. leaves: {
    219. label: {
    220. position: 'right',
    221. verticalAlign: 'middle',
    222. align: 'left'
    223. }
    224. },
    225. expandAndCollapse: true,
    226. animationDuration: 550,
    227. animationDurationUpdate: 750
    228. }
    229. ]
    230. };
    231. // 获得深度映射
    232. function getDepthMap(arr) {
    233. let startIndex = 0;
    234. function getDepthMapInner(data, deptMap, level) {
    235. if (!data) return;
    236. deptMap = deptMap||{};
    237. level = level||1;
    238. for(let item of data) {
    239. deptMap[++startIndex] = level;
    240. item.id = startIndex;
    241. getDepthMapInner(item.children, deptMap, level+1);
    242. }
    243. return deptMap;
    244. }
    245. return getDepthMapInner(arr);
    246. }
    247. // 拉平数据
    248. function flatten (data) {
    249. return data.reduce((arr, {name, value, children = []}) =>
    250. arr.concat([{name, value}], flatten(children)), [])
    251. }
    252. // 根据echarts显示树状结构,计算各层级的数量
    253. function maxDept(nodeArr, deptMap) {
    254. let deptArr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
    255. for(let i = 1; i<nodeArr.length; i++) {
    256. if(nodeArr[i]) {
    257. deptArr[deptMap[i]]++;
    258. }
    259. }
    260. return Math.max(...deptArr);
    261. }
    262. let deptMap = getDepthMap([data]);
    263. let dataArr = flatten([data]);
    264. //myChart.resize({width:1112})
    265. // myChart.on('onmousewheel', e=>{alert(e)});
    266. // function eConsole(param) {
    267. // alert('Zoom: ' + param);
    268. // }
    269. /**
    270. * 解决JS数字精度问题
    271. **/
    272. function eqs (n1, n2) {
    273. return Math.abs(n1 - n2) < Number.EPSILON
    274. }
    275. myChart.getZr().on('click', function(param){
    276. console.log(param);
    277. let els = myChart._chartsViews[0]._data._graphicEls;
    278. if (!param.target) { return; }
    279. let shape = param.target.shape;
    280. let p1 = [-1, -1], p2 = [-1, -1];
    281. if (shape.hasOwnProperty('childPoints')) { // 折线
    282. p1 = shape.parentPoint;
    283. } else if (shape.hasOwnProperty('x1')) { // 曲线
    284. p1 = [shape.x1, shape.y1];
    285. p2 = [shape.x2, shape.y2];
    286. }
    287. for(let i in els) {
    288. let el = els[i];
    289. if (eqs(el.position[0], p1[0]) && eqs(el.position[1], p1[1])) {
    290. console.log('初始节点'+JSON.stringify(dataArr[i-1]));
    291. }
    292. if (eqs(el.position[0], p2[0]) && eqs(el.position[1], p2[1])) {
    293. console.log('终止节点'+JSON.stringify(dataArr[i-1]));
    294. }
    295. }
    296. // console.log(els);
    297. })
    298. myChart.on('click', function(param){
    299. console.log(myChart._chartsViews[0]._data._rawData._data);
    300. console.log(param);
    301. let pt = myChart._chartsViews[0]._data._graphicEls[param.dataIndex];
    302. console.log(pt);
    303. opt = {series:{center: pt}}
    304. // myChart.setOption(opt);
    305. // console.log(myChart._chartsViews[0]._data._graphicEls);
    306. let dept = maxDept(myChart._chartsViews[0]._data._graphicEls, deptMap);
    307. let calcHeight = 25*dept;
    308. // console.log('Max Depth: ' + dept);
    309. myChart.resize({width:1112, height:calcHeight<800?800:calcHeight})
    310. })
    311. // myChart.getZr().on('mousewheel', function (e) {
    312. // console.log(myChart._chartsViews[0]._data._graphicEls);
    313. // let dept = maxDept(myChart._chartsViews[0]._data._graphicEls, deptMap);
    314. // let calcHeight = 25*dept;
    315. // console.log('Max Depth: ' + dept);
    316. // myChart.resize({width:1112, height:calcHeight<800?800:calcHeight})
    317. // })
    318. // myChart.showLoading();
    319. // setTimeout(function() {myChart.hideLoading();}, 3000);