- 1 <!DOCTYPE html>
- 2 <html lang="en">
- 3 <head>
- 4 <meta charset="UTF-8">
- 5 <title>饼图</title>
- 6 <script src="js/jquery-2.2.3.min.js"></script>
- 7 <script src="./js/echarts.min.js"></script>
- 8 <style>
- 9 #demo {
- 10 width: 450px;
- 11 height: 300px;
- 12 }
- 13
- 14 #fullScreenMask {
- 15 position: fixed;
- 16 top: 0;
- 17 left: 0;
- 18 width: 100%;
- 19 height: 100%;
- 20 display: none;
- 21 background-color: #ffffff;
- 22 }
- 23
- 24 #fullScreen {
- 25 width: 100%;
- 26 height: 100%;
- 27 }
- 28 </style>
- 29 </head>
- 30 <body>
- 31 <!-- 为 ECharts 准备一个具备大小(宽高)的 DOM -->
- 32 <div id="demo"></div>
- 33
- 34 <!--全屏显示的容器-->
- 35 <div id="fullScreenMask">
- 36 <div id="fullScreen"></div>
- 37 </div>
- 38
- 39 </body>
- 40 <script>
- 41 /*
- 42 * 知识点:
- 43 * 1、自定义工具按钮 全屏显示(在图表右上角)
- 44 * 2、图例名称过长拼接省略号
- 45 * 3、生成随机颜色
- 46 *
- 47 * 存在问题:
- 48 * 视觉引导线及标签名称过长 超出视图范围 如部门名称很长的这个情况
- 49 * 解决办法:
- 50 * 增加全屏显示功能 且小图表只开启前五项
- 51 * */
- 52
- 53
- 54 //初始化一个 echarts 实例
- 55 var chart = echarts.init(document.getElementById('demo'));
- 56 //声明一个 全屏显示的echarts图表
- 57 var chartScreen = null;
- 58 //指定图表的配置项和数据
- 59 var option = {
- 60 backgroundColor: 'rgba(70, 131, 254, .3)',
- 61 tooltip: {
- 62 trigger: 'item',
- 63 formatter: "{a} <br/>{b}: {c}"+ '人' +" ({d}%)" //饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
- 64 },
- 65 legend: {
- 66 icon: 'rect',
- 67 itemWidth: 12,
- 68 itemHeight: 12,
- 69 type: 'scroll',
- 70 textStyle:{
- 71 color:'#ffffff',
- 72 fontSize:12
- 73 },
- 74 orient: 'vertical',
- 75 data:[],
- 76 selected:{},
- 77
- 78 right: 10,
- 79 top: 30,
- 80 bottom: 20,
- 81
- 82 formatter: function (name) {
- 83 return echarts.format.truncateText(name, 90, '14px Microsoft Yahei', '…');//图例名称过长拼接省略号
- 84 },
- 85 tooltip: {
- 86 show: true
- 87 }
- 88 },
- 89 toolbox: {// 工具栏
- 90 itemSize:16,
- 91 showTitle:false,
- 92 right:24,
- 93 feature: {
- 94 myTool: {//自定义工具 myTool
- 95 show: true,
- 96 title: '全屏显示',
- 97 icon: "image://" + "./css/icon/full-screen-default.png",//此处 图片路径前面必须加字符串 "image://"
- 98 onclick: function (){
- 99 //生成全屏显示的图表
- 100 if (setFullScreenToolBox(option)) {
- 101 getChartData(chartScreen,false);
- 102 }
- 103 }
- 104 }
- 105 }
- 106 },
- 107 series: [
- 108 {
- 109 name:'人员部署',
- 110 type:'pie',
- 111 barWidth: '30%',
- 112 radius: ['50%', '70%'],
- 113 center:['40%', '50%'],
- 114 label: {
- 115 emphasis: {
- 116 show: true,
- 117 textStyle: {
- 118 fontSize: '14',
- 119 fontWeight: 'bold'
- 120 }
- 121 }
- 122 },
- 123 labelLine: {
- 124 normal: {
- 125 show: true
- 126 },
- 127 emphasis: {
- 128 show: true,
- 129 fontWeight: 'bold'
- 130 }
- 131 },
- 132 itemStyle:{
- 133 normal:{
- 134 color:function(params) {//生成随机颜色
- 135 var colorList = ['#E09C19','#E63234','#6AC3F1','#DD6B25','#D4E019','#009944','#6A8DF1','#C535A8','#6D54E9','#67E682','#E954CF','#CAF161'];
- 136 return params.dataIndex >= colorList.length-1 ? "#"+Math.floor(Math.random()*(256*256*256-1)).toString(16):colorList[params.dataIndex];
- 137
- 138 },
- 139 }
- 140 },
- 141 data:[]
- 142 }
- 143 ]
- 144 };
- 145
- 146 //使用刚指定的配置项和数据显示图表。
- 147 chart.setOption(option);
- 148 //插入图表数据
- 149 getChartData(chart,true) ;
- 150
- 151
- 152 /*
- 153 * 获取图表数据并插入
- 154 * @param chart 需要插入数据的图表
- 155 * @param bool 是否只显示前五项
- 156 * */
- 157 function getChartData(chart,bool) {
- 158 // $.ajax({
- 159 // url: '/api/...',
- 160 // data: {},
- 161 // type: "POST",
- 162 // dataType: 'json',
- 163 // success: function(result){
- 164 var result = {
- 165 data:[
- 166 {
- 167 count: 5,
- 168 name: "部门一",
- 169 },
- 170 {
- 171 count: 15,
- 172 name: "很长名字的部门很长名字的部门很长名字的部门",
- 173 },
- 174 {
- 175 count: 5,
- 176 name: "部门二",
- 177 },
- 178 {
- 179 count: 5,
- 180 name: "部门三",
- 181 },
- 182 {
- 183 count: 55,
- 184 name: "很长很长名字的部门",
- 185 },
- 186 {
- 187 count: 5,
- 188 name: "财务部",
- 189 },
- 190 {
- 191 count: 5,
- 192 name: "行政部",
- 193 },
- 194 {
- 195 count: 5,
- 196 name: "很长名字的部门",
- 197 },
- 198 {
- 199 count: 588,
- 200 name: "人力部",
- 201 },
- 202 {
- 203 count: 5,
- 204 name: "销售部",
- 205 },
- 206 {
- 207 count: 5,
- 208 name: "运营部",
- 209 },
- 210 {
- 211 count: 5,
- 212 name: "很长名字的部门很长名字的部门",
- 213 },
- 214 {
- 215 count: 25,
- 216 name: "部门五",
- 217 },
- 218 {
- 219 count: 85,
- 220 name: "部门6",
- 221 },
- 222 {
- 223 count: 55,
- 224 name: "部门7",
- 225 },
- 226 {
- 227 count: 55,
- 228 name: "部门8",
- 229 },
- 230 {
- 231 count: 555,
- 232 name: "部门9",
- 233 },
- 234 ]
- 235 }
- 236 var _count = [], _name = [] ,_selected = {};
- 237 if (result.data.length > 0) {
- 238 $.each(result.data,function (i,v) {
- 239
- 240 var proname = v.name;
- 241 _count.push({value:v.count, name:proname});
- 242 _name.push(proname);
- 243 //小图表 只显示前五项 大图表默认全部显示
- 244 bool && (i < 5 ?_selected[proname] = true : _selected[proname] = false);
- 245
- 246 });
- 247
- 248 chart.setOption({
- 249 legend: {
- 250 data:_name,
- 251 selected:_selected
- 252 },
- 253 series: [
- 254 {
- 255 data:_count
- 256 }
- 257 ]
- 258 });
- 259
- 260
- 261 }
- 262 // }
- 263 // });
- 264 }
- 265
- 266
- 267 //全屏显示 toolbox回调
- 268 //@param option echarts的配置项
- 269 function setFullScreenToolBox(option) {
- 270 if ($('#fullScreenMask').css('display') === 'block') {
- 271 $('#fullScreenMask').hide();
- 272 ChartScreen = null;
- 273 return false;
- 274 }
- 275
- 276 $('#fullScreenMask').show();
- 277 chartScreen = echarts.init(document.getElementById('fullScreen'));
- 278 chartScreen.setOption(option);
- 279 chartScreen.setOption({
- 280 toolbox: {
- 281 feature: {
- 282 myTool: {
- 283 title: '退出全屏',
- 284 icon: "image://" + "./css/icon/exit-full-screen-default.png",
- 285 }
- 286 }
- 287 }
- 288 });
- 289 return true;
- 290 }
- 291
- 292 window.onresize = function () {
- 293 chartScreen.resize()
- 294 }
- 295
- 296 </script>
- 297 </html>