扣丁學堂HTML5培訓簡述HTML5 canvas簡單封裝一個echarts實現不了的餅圖

echars應該有很多小夥伴用了好久了,若是出現如上圖所示樣式的餅圖,用echarts很難實現,官方給的文檔沒有這種模式的餅圖。試過用d3和canvas分別畫餅圖,本着輕量化的原則,因此採用canvas封裝。本篇文章扣丁學堂HTML5培訓小編給讀者們分享一下HTML5 canvas簡單封裝一個echarts實現不了的餅圖,但願對小夥伴們有幫助。canvas

官方餅圖兩種模式:(1)半徑模式(2)面積模式微信

實現過程echarts

(1)封裝的函數以下:函數

function drawCircle(canvasId, option) {學習

const color_arr = option.color

let data_arr = option.data

const pi2 = Math.PI * 2;

let canvas = document.getElementById(canvasId);

let c = canvas.getContext("2d");

let startAgl = 0;

let agl;

let sum = 0;

const cW = canvas.width;

const cH = canvas.height;

for (let item of data_arr) {

  sum += item.value * 1.0

}

data_arr = data_arr.map((v, i) => {

  return {

    name: v.name,

    value: (v.value) * 1.0 / sum

  }

})

for (let i = 0; i < data_arr.length; i++) {

  //繪製餅圖

  let min = (cW > cH ? cH : cW); //獲取canvas寬高的最小值

  agl = data_arr[i].value * pi2 + startAgl; //終點

  c.strokeStyle = color_arr[i];

  c.lineWidth = data_arr[i].value * min * 0.3; // 線的粗細

  c.beginPath();

  c.arc(cW / 2, cH / 2, min * 0.3, startAgl, agl, false); //畫圓

  c.stroke();

  c.closePath();

  startAgl = agl;

  //繪製圖例

  c.fillStyle = color_arr[i];

  c.fillRect(cW * 0.8, 50 + 18 * i, 16, 16);

  c.fillText(data_arr[i].name, cW * 0.8 + 20, 62 + 18 * i);

}

}code

(2)調用方式:視頻

let color = ['#0580F2', '#FAA732', '#E1575D', '#8B73CC', '#8CD123', '#4B53BA', '#429588'];教程

let option = {開發

color: color,

data: [

  { name: '20', value: '20' },

  { name: '30', value: '30' },

  { name: '40', value: '40' },

  { name: '50', value: '50' },

  { name: '60', value: '60' },

]

}文檔

drawCircle('myCanvas', option)

想要了解更多關於HTML5開發方面內容的小夥伴,請關注扣丁學堂HTML5培訓官網、微信等平臺,扣丁學堂IT職業在線學習教育有專業的HTML5講師爲您指導,此外扣丁學堂老師精心推出的HTML5視頻教程定能讓你快速掌握HTML5從入門到精通開發實戰技能。

相關文章
相關標籤/搜索