JavaScript+Canvas實現簡單的柱狀圖
筆者之所以想要深入了解 Canvas,是因為最近幾次的實習部門都屬于 Data 這個門類下面,所以用echarts之類的圖標庫會很多很多,那么當然要好好學一下其間的底層原理了。
那么讓我們好好聊聊,如何實現一個柱狀圖
如何實現一個柱狀圖
Step1
首先創(chuàng)建一個叫做barchart.html的新文件,并且在其中寫入如下代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<canvas width="500" height="500" id="canvas"></canvas>
</body>
<script>
var data = [16, 68, 20, 30, 54];
</script>
</html>
Tips 我們知道canvas可以使用fillRect來實現一個矩形。
fillRect(x, y, xWidth, yHeight)
fillRect有四個參數,分別是x的坐標,y的坐標,寬度與高度。
Step2
我們創(chuàng)建文件包含了 canvas 和 script 元素,對canvas來說,我們標注了他的寬高,它類似于DOM中的DIV元素,我們可以為其添加樣式和移動位置。
data變量呢則是一系列的數據集,我們將用這些變量來畫柱狀圖。
接下來我們將獲取canvas元素,并且繪制一個底層色(灰色)
//get a reference to the canvas
var canvas = document.getElementById('canvas');
//get a reference to the drawing context
var c = canvas.getContext('2d');
//draw c.fillStyle = "gray";
c.fillRect(0,0,500,500);

Step3
在我們的基本條件都具備了之后,我們可以添加數據了,這里采用一個循環(huán)來添加。
//draw data
c.fillStyle = "blue";
for(var i=0; i<data.length; i++) {
var dp = data[i];
c.fillRect(25 + i*100, 30, 50, dp*5);
}
效果如下:

但是這里有一個問題,我們的柱狀圖,反了!怎么讓他正起來呢?
Step4
我們知道,fillRect的前兩個參數是我們的起點x和y的坐標,那么為了實現“正”的效果,我們可以移動起點的位置。
//draw data
c.fillStyle = "blue";
for(var i=0; i<data.length; i++) {
var dp = data[i];
c.fillRect(25 + i*100, 500-dp*5 - 30 , 50, dp*5);
}
效果如下:

是不是看起來很舒服啦?
但是現在還有一個問題,我們的坐標軸去哪了???
Step5
現在,讓我們一起來畫一個坐標軸
首先需要畫x軸和y軸
//draw axis lines c.fillStyle = "black"; c.lineWidth = 2.0; c.beginPath(); c.moveTo(30,10); c.lineTo(30,460); c.lineTo(490,460); c.stroke();
然后我們要新增y軸標記點和文本
//draw text and vertical lines
c.fillStyle = "black";
for(var i=0; i<6; i++) {
c.fillText((5-i)*20 + "",4, i*80+60);
c.beginPath();
c.moveTo(25,i*80+60);
c.lineTo(30,i*80+60);
c.stroke();
}
最后新增x軸文本
var labels = ["JAN","FEB","MAR","APR","MAY"];
//draw horiz text
for(var i=0; i<5; i++) {
c.fillText(labels[i], 50+ i*100, 475);
}
效果如下:

看起來有部分問題,讓我們再來做一些調整!
Step6
將背景色改成白色 & 把起點做一下變更。
//draw background
c.fillStyle = "white";
c.fillRect(0,0,500,500);
//draw data
c.fillStyle = "blue";
for(var i=0; i<data.length; i++) {
var dp = data[i];
c.fillRect(40 + i*100, 460-dp*5 , 50, dp*5);
}

噔噔噔噔,我們的柱狀圖就這樣寫好啦~
到此這篇關于JavaScript+Canvas實現簡單的柱狀圖的文章就介紹到這了,更多相關JavaScript Canvas柱狀圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IntelliJ IDEA 安裝vue開發(fā)插件的方法
本篇文章主要介紹了IntelliJ IDEA 安裝vue開發(fā)插件的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
js 創(chuàng)建對象的多種方式與優(yōu)缺點小結
這篇文章主要介紹了js 創(chuàng)建對象的多種方式與優(yōu)缺點,幫助大家更好的理解和學習使用JavaScript,感興趣的朋友可以了解下2021-03-03

