123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- /**
- * 环形图。
- * 作者:tmzdy
- * url:https://jx2d.cn
- */
- let ring = function (render, config={}) {
-
- let defauletcfg = {
- tooltip: {
- trigger: 'item'
- },
- color:["#E91E63","#2196F3","#311B92","#FDD835","#BCAAA4"],
- legend: {
- top: '5%',
- left: 'center'
- },
- series: [{
- name: 'Access From',
- type: 'pie',
- radius: ['20%', '35%'],
-
- label: {
- show: false,
- position: 'center'
- },
- emphasis: {
- label: {
- show: true,
- fontSize: '40',
- fontWeight: 'bold'
- }
- },
- labelLine: {
- show: false
- },
- data: [{
- value: 1048,
- name: 'Search Engine'
- },
- {
- value: 735,
- name: 'Direct'
- },
- {
- value: 580,
- name: 'Email'
- },
- {
- value: 484,
- name: 'Union Ads'
- },
- {
- value: 300,
- name: 'Video Ads'
- }
- ]
- }]
- }
- defauletcfg = {...defauletcfg,...config}
- const [w, h] = render.area;
- //最大圆环厚度。等于圆。
- let lineMaxHeight = w / 2;
- let lineStoreWidth = (parseFloat(defauletcfg.series[0].radius[1]) - parseFloat(defauletcfg.series[0].radius[0]))/100;
- lineStoreWidth =Math.floor( lineStoreWidth*lineMaxHeight);
- let r = parseFloat(defauletcfg.series[0].radius[1])/100 * lineMaxHeight;
- let data = defauletcfg.series[0].data;
- let maxValue = data.map(el => parseInt(el.value));
-
- //总数量。
- maxValue = maxValue.reduce((p,c)=>p+c);
- //计算各自的比例数量。保留两位小数点。
- let rang = Math.PI *2;
- //每一个元素的圆弧的长度。
- let rangArray = data.map(el=>{
- let num = parseInt(el.value)/maxValue;
-
- return rang*num
- })
-
- let dataBlv = data.map((el,index) => {
- let st = index;
- let num = parseFloat(el.value)/maxValue;
- let blv = parseFloat(num.toFixed(2));
- let startAngle = 0;
- let endAngle = 0;
- if(st==0){
- startAngle = 0;
- endAngle = rangArray[st]
- }else{
- let s = rangArray.slice(0,st)
-
- startAngle = s.reduce((p,c)=>p+c);
- endAngle = startAngle+rangArray[st]
- }
-
- return {...el,
- blv:blv,
- startAngle:startAngle,
- endAngle:endAngle
- };
- });
-
- let xf = [];
- dataBlv.forEach((el,index)=>{
-
- let cfg = {
- name: 'arc',
- animationCurve: 'liner',
- hover: false,
- drag: false,
- shape: {
- rx: w/2,
- ry: h/2,
- r: r,
- startAngle: el.startAngle,
- endAngle: el.endAngle,
- },
- style: {
- stroke: defauletcfg.color[index],
- lineWidth: lineStoreWidth,
- shadowBlur: 0,
- rotate: 0,
- shadowColor: '#66eece',
- hoverCursor: 'pointer',
- },
- };
- xf.push(cfg)
-
- })
-
- return xf;
- }
- export default ring;
|