进度图

描述:当前是关于Echarts图表中的 漏斗图 示例。
 
            let data = [
   {
      "value": 11520,
      "name": "居民小区"
   },
   {
      "value": 21130,
      "name": "荐椎工地"
   },
   {
      "value": 11710,
      "name": "餐饮企业"
   },
   {
      "value": 11450,
      "name": "公共机构"
   },
   {
      "value": 38911,
      "name": "其他"
   }
]
let data1 = JSON.parse(JSON.stringify(data))
let total = 0
let left = 0
data.forEach((item, index) => {
   total += item.value
})
data.forEach((item, index) => {
   item.width = (item.value / total)
   item.left = left
   left += (item.value / total)
   if (index > data.length / 2) {
      item.minSize = 40 - 10 * (index - (data.length / 2))
      item.maxSize = 40 - 10 * (index - (data.length / 2))
   } else {
      item.minSize = 10 * (index + 1)
      item.maxSize = 10 * (index + 1)
   }
   item.data = [data1[index]]
})
let optionSeries = data.map(item => ({
   name: item.name,
   type: 'funnel',
   orient: 'horizontal',
   top: '-25%',
   width: (item.width * 100) + '%',
   left: item.left * 100 + '%',
   minSize: item.minSize,
   maxSize: item.maxSize,
   label: {
      show: false,
   },
   labelLine: {
      show: false,
   },
   emphasis: {
      disabled: true,//是否关闭高亮状态。
   },
   itemStyle: {
      borderWidth: 0,//去掉白边
   },
   silent: true,// 图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件quanmei。
   data: item.data,
}))
let rich = {}
let color = ['#FF955F', '#4346D3', '#FFCF5F', '#2276FC', '#EE6F7C']
color.forEach((item, index) => {
   rich[`point${index}`] = {
      width: 8,
      height: 8,
      borderRadius: 2,
      backgroundColor: color[index],
   }
})
let option = {
   color: color,
   legend: {
      left: 13,
      top: '36%',
      selectedMode: false, // 图例禁止点击
      // itemHeight: 8,
      // itemWidth: 8,
      // itemGap: 10,
      icon: 'none',
      formatter(name) { // 该函数用于设置图例显示后的百分比
         let idx = data1.findIndex((item) => item.name == name)
         return `{point${idx}|}{a|${name}}{b|${data1[idx].value}}`
      },
      data: data1.map(item => item.name),
      textStyle: {
         color: '#333',
         fontSize: 12,
         padding: [10, 0, 0, 0],
         rich: {
            ...rich,
            a: {
               width: 70,
               padding: [0, 0, 0, 10],
            },
            b: {
               width: 55,
               fontWeight: 'bold',
            }
         },
      },
   },
   grid: {
      left: 0,
      bottom: 0,
      right: 0,
      top: 0
   },
   series: optionSeries
};