最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3+echarts實現(xiàn)漸變色環(huán)形圖過程

 更新時間:2024年08月28日 14:24:54   作者:不吃辣椒不行  
這篇文章主要介紹了vue3+echarts實現(xiàn)漸變色環(huán)形圖過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

vue3 echarts實現(xiàn)漸變色環(huán)形圖

實現(xiàn)的效果大致是這樣

由于是公司的項目,指引線后標注的內(nèi)容不展示了,大致是指引線上方是name,下邊是value+單位

1.定義圖表容器

<div class="chart" ref="chartRef" style="width: 610px; height: 260px;"></div>

2.我這邊所需要的數(shù)據(jù)形式大概是

const data = {
    equmentStatusEchart: [
    {name: '標題1', value: 10}
    {name: '標題2', value: 10}
    ]
}

通過接口拿到的數(shù)據(jù)類型一般是:[{} ,{}]這種類型的,寫一個方法將其轉(zhuǎn)變?yōu)槲宜枰男问?/p>

const convertArrayToObject = (array) => {
  const convertedObject = {
    equmentStatusEchart: array.map(item => ({
      name: item.name,
      value: item.value
    }))
  };
  return convertedObject;
};

具體的代碼如下:

將接口轉(zhuǎn)換成自己的就好了,我這個是隨機生成的顏色漸變,如果有需求可以固定一個顏色數(shù)組

import * as echarts from 'echarts';
import { ref, onMounted, nextTick } from 'vue';
import { getPersonnel } from '@/api'
const chartRef = ref(null)
//重點人員
const rangArr = ref([]);
const distribution = ref([])
const distributionList = ref([])
const deflag = ref(1)
const angleArr = ref({})
const data = ref([])
//轉(zhuǎn)換成所需對象數(shù)組
const convertArrayToObject = (array) => {
  const convertedObject = {
    equmentStatusEchart: array.map(item => ({
      name: item.communityName,
      value: item.countSum,
      communityId: item.communityId
    }))
  };
  return convertedObject;
};
function getCoordinates(startArc, endArc) {
    const posi = [
      Math.sin(startArc),
      -Math.cos(startArc),
      Math.sin(endArc),
      -Math.cos(endArc)
    ];
    const dx = posi[2] - posi[0];
    const dy = posi[3] - posi[1];

    return getLocation(dx, dy);
  }

  function getLocation(dx, dy) {
    const tanV = dx / dy;
    const directSign = Math.abs(tanV) < 1;
    const t = directSign ? tanV : 1 / tanV;

    const sign1 = t > 0 ? 1 : -1;
    const sign2 = dx > 0 ? 1 : -1;
    const sign = directSign ? sign1 * sign2 : sign2;

    const group1 = [0.5 - sign * t / 2, 0.5 + sign * t / 2];
    const group2 = sign > 0 ? [0, 1] : [1, 0];
    const group = [...group1, ...group2];
    const keys = directSign ? ['x', 'x2', 'y', 'y2'] : ['y', 'y2', 'x', 'x2'];

    let res = {};
    keys.forEach((k, idx) => {
      res[k] = group[idx];
    });
    return res;
  }
const getPersonnelList = async() => {
  distribution.value = await getPersonnel(deflag.value)
  distributionList.value = distribution.value.data
  const obj = convertArrayToObject(distributionList.value)
  console.log(obj)
  const totalValue = ref(obj.equmentStatusEchart.reduce((total, value) => total + value.value, 0));
  let cacheNum = 0;
  for (let i = 0; i < obj.equmentStatusEchart.length; i++) {
    const endNum = cacheNum + obj.equmentStatusEchart[i].value;
    rangArr.value.push([cacheNum, endNum]);
    cacheNum = endNum;
  }
  const angleArr = ref(rangArr.value.map(arr => arr.map(num => (num / totalValue.value) * Math.PI * 2)));
  data.value = obj.equmentStatusEchart.map((item, index) => {
    const range = getCoordinates(angleArr.value[index][0], angleArr.value[index][1]);
    const startColor = `rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`;
    const color = {
      type: 'linear',
      x: range.x,
      x2: range.x2,
      y: range.y,
      y2: range.y2,
      colorStops: [{
        offset: 0, color: startColor // 起始顏色
      }, {
        offset: 1, color: `${startColor.substring(0, startColor.length - 1)}, 0)` // 終點顏色
      }],
      global: false
    };

    return {
      name: item.name,
      value: item.value,
      itemStyle: {
        color: color
      }
    };
  })
}
 
  const getChart = async() => {
    await getPersonnelList()
    const option = {
      tooltip: {
        trigger: 'item',
        backgroundColor: 'rgba(0, 0 , 0, .6)',
        borderColor: "rgba(147, 235, 248, .8)",
        textStyle: {
          color: "#fff"
        },
      },
      series: [
        {
          type: 'pie',
          radius: ['65%', '75%'],
          center: ['50%', '50%'],
          avoidLabelOverlap: false,
          itemStyle: {
          },
          label: {
            show: true,
            position: 'outer',
            align: 'left',
            height: 50,
            lineHeight: 10,
            formatter: function(params) {
            return (
              '{a|' + params.data.name + '}\n' +
              '{b|' + params.data.value  + ' } ' +
              '{value| 人}'
            );
            },
            borderWidth: 10,
            padding: [0, -60],
            rich: {
            a: {
              fontSize: 14,
              color: '#fff',
              fontWeight: 400,
              lineHeight: 35
            },
            b: {
              color: '#fff', 
              fontSize: 18,
              fontWeight: 600,
              lineHeight: 10
            },
            value: {
              color: '#fff',
              fontSize: 14,
              fontWeight: 400,
            }
          }
          },
        labelLine: {
          show: true,
          length: 20,
          length2: 160,
          smooth: 0,
          lineStyle: {
            color: 'white'
          }
        },
          emphasis: {
            itemStyle:{
              shadowBlur: 10,
              shadowOffsetX: 0,
              shadowColor: 'rgba(0, 0, 0, 0.2)'
            }
          },
          data: data.value
        },

      ],
    };
    nextTick(() => {
      const chartDom = chartRef.value;
      const myChart = echarts.init(chartDom);
      myChart.setOption(option)
    })
  }


onMounted(() => {
  getChart()
  
})

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue3 elementUI如何修改el-date-picker默認時間

    Vue3 elementUI如何修改el-date-picker默認時間

    這篇文章主要介紹了Vue3 elementUI如何修改el-date-picker默認時間,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 使用Vue實現(xiàn)簡單計算器

    使用Vue實現(xiàn)簡單計算器

    這篇文章主要為大家詳細介紹了使用Vue實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Vue3使用MD5加密實戰(zhàn)案例(清晰明了)

    Vue3使用MD5加密實戰(zhàn)案例(清晰明了)

    MD5是一種信息摘要算法(對稱加密),一種被廣泛使用的密碼散列函數(shù),可以產(chǎn)生出一個128位(16字節(jié))的散列值,用來確保信息傳輸完整一致性,這篇文章主要給大家介紹了關(guān)于Vue3使用MD5加密的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • vue實現(xiàn)簡單的購物車小案例

    vue實現(xiàn)簡單的購物車小案例

    這篇文章主要為大家詳細介紹了vue實現(xiàn)簡單的購物車小案例,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue-router配合ElementUI實現(xiàn)導(dǎo)航的實例

    vue-router配合ElementUI實現(xiàn)導(dǎo)航的實例

    下面小編就為大家分享一篇vue-router配合ElementUI實現(xiàn)導(dǎo)航的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • VUE異步更新DOM - 用$nextTick解決DOM視圖的問題

    VUE異步更新DOM - 用$nextTick解決DOM視圖的問題

    這篇文章主要介紹了VUE異步更新DOM - 用$nextTick解決DOM視圖的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • elementui時間/日期選擇器選擇禁用當前之前(之后)時間代碼實例

    elementui時間/日期選擇器選擇禁用當前之前(之后)時間代碼實例

    當我們在進行網(wǎng)頁開發(fā)時,通常需要用到一些日期組件來方便用戶選擇時間,其中element日期組件是一個非常好用的工具,這篇文章主要給大家介紹了關(guān)于elementui時間/日期選擇器選擇禁用當前之前(之后)時間的相關(guān)資料,需要的朋友可以參考下
    2024-02-02
  • Vue登錄頁面的動態(tài)粒子背景插件實現(xiàn)

    Vue登錄頁面的動態(tài)粒子背景插件實現(xiàn)

    本文主要介紹了Vue登錄頁面的動態(tài)粒子背景插件實現(xiàn),將登錄組件背景設(shè)置為 "粒子背景",具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • vue實現(xiàn)隨機驗證碼功能(完整代碼)

    vue實現(xiàn)隨機驗證碼功能(完整代碼)

    驗證碼功能在我們的身邊用處極廣,今天小編給大家分享基于vue實現(xiàn)隨機驗證碼功能,感興趣的朋友跟隨小編一起看看吧
    2019-12-12
  • vuex的幾個屬性及其使用傳參方式

    vuex的幾個屬性及其使用傳參方式

    這篇文章主要介紹了vuex的幾個屬性及其使用傳參,本文結(jié)合實例代碼給大家講解的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01

最新評論

蓝田县| 麻阳| 宁明县| 抚远县| 和政县| 阿荣旗| 潜山县| 红桥区| 随州市| 巴彦县| 明水县| 富源县| 区。| 五大连池市| 如皋市| 涡阳县| 达州市| 永善县| 资阳市| 罗甸县| 象州县| 本溪| 广宗县| 霸州市| 韩城市| 东乡| 隆子县| 台前县| 金塔县| 全南县| 金湖县| 杭锦后旗| 平遥县| 木兰县| 庆安县| 四子王旗| 上虞市| 三台县| 南陵县| 拉萨市| 东乌珠穆沁旗|