pie-calculable.html 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <script src="esl.js"></script>
  5. <script src="config.js"></script>
  6. <script src="lib/dat.gui.min.js"></script>
  7. </head>
  8. <body>
  9. <style>
  10. html, body, #main {
  11. width: 100%;
  12. height: 100%;
  13. background-image: url(old_mathematics.png);
  14. background-repeat: repeat;
  15. }
  16. </style>
  17. <div id="main"></div>
  18. <script>
  19. require([
  20. 'echarts',
  21. 'echarts/chart/pie',
  22. 'echarts/component/legend',
  23. 'echarts/component/grid',
  24. 'echarts/component/tooltip',
  25. 'echarts/component/toolbox'
  26. ], function (echarts) {
  27. var mainEl = document.getElementById('main');
  28. var chart = echarts.init(mainEl);
  29. var colorList = [
  30. '#c23531', '#2f4554', '#61a0a8',
  31. '#d48265', '#91c7ae','#749f83',
  32. '#ca8622', '#bda29a','#6e7074',
  33. '#546570', '#c4ccd3'
  34. ];
  35. var data = [
  36. {value: 335, name: '直接访问'},
  37. {value: 310, name: '邮件营销'},
  38. {value: 234, name: '联盟广告'},
  39. {value: 135, name: '视频广告'},
  40. {value: 1548, name: '搜索引擎'}
  41. ];
  42. var legendData = [];
  43. echarts.util.each(data, function (item, index) {
  44. item.itemStyle = {
  45. normal: {color: colorList[index]}
  46. };
  47. legendData.push(item.name);
  48. });
  49. chart.setOption({
  50. legend: {
  51. data: legendData,
  52. formatter: function (name) {
  53. return name.replace(/\n/g, ' + ');
  54. }
  55. },
  56. toolbox: {
  57. left: 'left',
  58. feature: {
  59. dataView: {},
  60. saveAsImage: {}
  61. }
  62. },
  63. tooltip: {},
  64. series: [{
  65. name: 'pie',
  66. type: 'pie',
  67. selectedMode: 'single',
  68. selectedOffset: 30,
  69. clockwise: true,
  70. label: {
  71. normal: {
  72. textStyle: {
  73. fontSize: 18,
  74. color: '#333'
  75. }
  76. }
  77. },
  78. labelLine: {
  79. normal: {
  80. lineStyle: {
  81. color: '#333'
  82. }
  83. }
  84. },
  85. data: data
  86. }]
  87. });
  88. var dragging;
  89. var draggingDataIndex;
  90. var dx;
  91. var dy;
  92. var zr = chart.getZr();
  93. chart.on('mousedown', function (params) {
  94. draggingDataIndex = getHoveredDataIndex(params);
  95. if (draggingDataIndex != null) {
  96. var srcSector = params.event.target;
  97. dragging = new echarts.graphic.Sector({
  98. shape: echarts.util.extend({}, srcSector.shape),
  99. style: {
  100. fill: srcSector.style.fill,
  101. opacity: 0.5
  102. },
  103. silent: true,
  104. z: 10000
  105. });
  106. dx = params.event.offsetX - srcSector.shape.cx;
  107. dy = params.event.offsetY - srcSector.shape.cy;
  108. zr.add(dragging);
  109. }
  110. });
  111. chart.on('mouseup', function (params) {
  112. if (dragging) {
  113. var targetDataIndex = getHoveredDataIndex(params);
  114. if (targetDataIndex != null
  115. && targetDataIndex !== draggingDataIndex
  116. ) {
  117. data[targetDataIndex].value += data[draggingDataIndex].value;
  118. data[targetDataIndex].name += '\n' + data[draggingDataIndex].name;
  119. legendData[targetDataIndex] = data[targetDataIndex].name;
  120. data.splice(draggingDataIndex, 1);
  121. legendData.splice(draggingDataIndex, 1);
  122. chart.setOption({
  123. legend: {data: legendData},
  124. series: {data: data}
  125. });
  126. }
  127. }
  128. });
  129. mainEl.addEventListener('mousemove', function (e) {
  130. var box = mainEl.getBoundingClientRect();
  131. var zrX = e.clientX - box.left;
  132. var zrY = e.clientY - box.top;
  133. if (dragging) {
  134. dragging.setShape({
  135. cx: zrX - dx,
  136. cy: zrY - dy
  137. });
  138. }
  139. });
  140. document.addEventListener('mouseup', function (e) {
  141. if (dragging) {
  142. zr.remove(dragging);
  143. dragging = null;
  144. }
  145. });
  146. function getHoveredDataIndex(params) {
  147. return params.componentType === 'series'
  148. && params.componentSubType === 'pie'
  149. && params.dataIndex;
  150. }
  151. })
  152. </script>
  153. </body>
  154. </html>