網(wǎng)上統(tǒng)計圖插件非常多,比如Echarts、Chart.js等,但是如果你要的是功能簡單,單一的統(tǒng)計圖,應(yīng)用這些就會很浪費,也增加自身體積,如果你想要簡單的扇形統(tǒng)計圖,請看過來!
Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖
Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖
Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖
Canvas繪制扇形統(tǒng)計圖,50行代碼的統(tǒng)計圖
// 示例一 drawCircle({ id: 'one',//dom元素 color: '#10af7e',//顏色 bgLine: '#e4e4e4',//背景顏色 angle: 0.5,//所占比例 lineWidth: 15,//寬度(像素) lineCap: 'round'//描邊的樣式 }); // 示例二 drawCircle({ id: 'two', angle: 0.75, color: '#49b1f5', bgLine: '#f3766f', lineWidth: 20 }); // 示例三 drawCircle({ id: 'three', angle: 1, lineWidth: 25, color: 'grd' });
這里的css主要是用來[示例頁面](http://demo.javanx.cn/canvas-charts/)布局的,可以直接忽略
.box ul, .box li { list-style: none; margin: 0; padding: 0; } .box ul li { float: left; width: 33%; text-align: center; }
需要源碼和演示地址的同學(xué),點擊下方“了解更多”!
更多資源敬請關(guān)注!
Canvas API(畫布)提供了一個通過 javascript 和 html 的 canvas 元素來在網(wǎng)頁上實時繪制圖形的方式??捎糜趧赢?、游戲、圖標(biāo)、圖片編輯等多個方面。
使用前,首先需要新建在網(wǎng)頁上新建 canvas 元素。
<canvas id="mycanvas" width="400" height="400">
您的瀏覽器不支持canvas!
</canvas>
上述代碼,如果瀏覽器不支持 canvas,就會顯示標(biāo)簽中間的文字--您的瀏覽器不支持 canvas!標(biāo)簽通常指定一個 id 屬性,width、height 屬性一般定義畫布的大小。
每個 canvas 元素都有一個對應(yīng)的 context 對象(上下文對象),Canvas API 定義在 context 對象上,使用 getContext 方法來獲取對象。
var canvas=document.getElementById("mycanvas");
var ctx=canvas.getContext("2d")
getContext 方法指定參數(shù)2d,表示 canvas 用于生成平面圖案,如果是 3d,表示 canvas 用于生成3d立體圖像。
canvas 畫布提供了一個畫圖的平面空間范圍,每個點都有自己的坐標(biāo),原點位于畫布的左上角,x表示橫坐標(biāo),y表示縱坐標(biāo)。
2.1 繪制路徑
eg:繪制一條線寬為5像素的紅色線條,代碼如下:
var canvas=document.getElementById("mycanvas");
var ctx=canvas.getContext("2d")
ctx.beginPath();
ctx.moveTo(0,0)
ctx.lineTo(400,400)
ctx.lineWidth=5
ctx.strokeStyle="red"
ctx.stroke()
eg:繪制一個綠色三角形,代碼如下:
var canvas=document.getElementById("mycanvas");
var ctx=canvas.getContext("2d")
ctx.beginPath();
ctx.moveTo(0,0)
ctx.lineTo(400,400)
ctx.lineTo(0,400)
ctx.closePath()
ctx.lineWidth=5
ctx.strokeStyle="red"
ctx.stroke()
ctx.fillStyle="green"
ctx.fill()
2.2 繪制矩形
上述繪制矩形的方法中均有四個參數(shù),其中x,y表示矩形的左上角頂點,也算起點,width、height 為矩形的寬高。strokeRect 與 strokeStyle 配合使用,fillRect 與 fillStyle 配合使用。
eg:繪制一個帶有紅色邊框的矩形,代碼如下:
var canvas=document.getElementById("mycanvas")
var ctx=canvas.getContext('2d')
ctx.strokeStyle="red";
ctx.strokeRect(100,100,200,100)
上述 stroke 替換成fill便可繪制一個紅色矩形。
2.3 繪制圓形 / 弧
上述的參數(shù)中,x,y 表示圓心的坐標(biāo),radius 是半徑,start 開始弧度,end 結(jié)束弧度,anticlockwise 表示是否是逆時針。
eg:繪制一個帶有紅色描邊的黑色圓,代碼如下:
<canvas id="circle" width="400" height="400"></canvas>
<script>
var canvas=document.getElementById("circle")
var ctx=canvas.getContext('2d')
ctx.arc(200,200,100,0,Math.PI*2,false);
ctx.lineWidth=10
ctx.strokeStyle="red"
ctx.stroke()
ctx.fillStyle="#000"
ctx.fill()
</script>
2.4 繪制文本
上述兩個方法均帶有三個參數(shù),第一個 string 是需要繪制的內(nèi)容,x,y 是文字的位置,需要注意的是 y 坐標(biāo)是以文字的基線處開始算距離的,并非是文字頂部。文字的其他樣式可通過 font 屬性設(shè)置,與 css 的 font 類似。
eg:繪制實心的文字,并設(shè)置文字加粗、大小20像素是微軟雅黑字體。代碼如下:
var canvas=document.getElementById("mycanvas")
var ctx=canvas.getContext('2d')
ctx.fillStyle="red";
ctx.font="bold 40px 微軟雅黑"
ctx.fillText("我愛前端",100,100)
注意:繪制文本的時候無法換行,如果需要換行的時候就需要多次繪制文字,達(dá)成換行目的。
2.5 設(shè)置漸變色
其中 x1,y1 表示起點,x2,y2 表示終點,通過不同坐標(biāo)可控制漸變方向。
eg:給文字設(shè)置漸變色,代碼如下:
var canvas=document.getElementById("mycanvas")
var ctx=canvas.getContext('2d')
var grd=ctx.createLinearGradient(0,0,400,400)
grd.addColorStop(0,"#4dffff")
grd.addColorStop(1,"#8e12aa")
ctx.fillStyle=grd;
ctx.font="bold 40px 微軟雅黑"
ctx.fillText("我愛前端",100,100)
2.6 設(shè)置陰影
eg:制作一個帶有陰影的矩形,代碼如下:
var canvas=document.getElementById("mycanvas")
var ctx=canvas.getContext("2d")
ctx.shadowOffsetX=5;
ctx.shadowOffsetY=5
ctx.shadowBlur=10;
ctx.shadowColor="rgba(0,0,0,0.5)"
ctx.fillStyle="red"
ctx.fillRect(0,0,200,100);
3.1 drawImage
drawImage(img,x,y) - 對圖片進行重繪
drawImage方法接受三個參數(shù),第一個是圖片文件的 DOM 元素,x,y 表示繪制圖片的起始位置,也是圖片的左上角。由于圖片加載需要時間,drawImage 方法只能在圖片加載完成后才能調(diào)用。
eg:把一張圖片重繪到 canvas 上,代碼如下:
var canvas=document.getElementById("mycanvas")
var ctx=canvas.getContext("2d")
var img=new Image()
img.src="https://zhengxin-pub.cdn.bcebos.com/financepic/cc840df83f7b47551e080410cc6c484c_fullsize.jpg"
img.onload=function(){
ctx.clearRect(0,0,canvas.width,canvas.height)
ctx.drawImage(img,0,0)
}
3.2 getImageData、putImageData
getImageData(0,0,canvas.width,canvas.height)
getImageData 用來讀取 canvas 的內(nèi)容,返回一個對象,包含了每個像素的信息。
var info=ctx.getImageData( 0 , 0 , canvas.width , canvas.height )
putImageData( info , 0 , 0 )
putImageData 是將 getImageData 獲取到的信息,重新繪制到 canvas。
3.3 toDataURL
對圖像數(shù)據(jù)做出修改后,使用 toDataURL 方法,將 canvas 數(shù)據(jù)重新轉(zhuǎn)化成一般的圖像文件格式,然后可以進行另存本地或轉(zhuǎn)發(fā)功能。
eg:將 canvas 繪制的矩形轉(zhuǎn)成一張圖片,顯示到網(wǎng)頁上,代碼如下:
<canvas id="mycanvas" width="400" height="400"></canvas>
<img src="" alt="" id="picture">
<script>
var canvas=document.getElementById("mycanvas")
var ctx=canvas.getContext('2d')
ctx.strokeStyle="red";
ctx.strokeRect(100,100,200,100)
var img=document.getElementById("picture")
img.src=canvas.toDataURL("image/png")
</script>
3.4 save、restore
eg:下面代碼先用 save 方法,保存了當(dāng)前設(shè)置,然后繪制了一個有陰影的矩形。接著,使用 restore 方法,恢復(fù)了保存前的設(shè)置,繪制了一個沒有陰影的矩形。
天小編將分享前端開發(fā)中必學(xué)的知識點,HTML5中關(guān)于Canvas(畫布)的知識點;
Canvas,是HTML5中所有新特性目前應(yīng)用最廣泛的一個標(biāo)簽,替代引入的圖片(圖形),用途非常廣泛如(因此這個標(biāo)簽相當(dāng)重要):
1.完成HTML頁面中的圖形繪制
2.實現(xiàn)網(wǎng)絡(luò)游戲或單機游戲(網(wǎng)頁游戲)
3.在HTML頁面中繪制圖表
4.餅狀圖
5.柱狀圖
6.折線圖
7.網(wǎng)頁游戲
...
Canvas的發(fā)展方向,目前主流的游戲開發(fā)引擎之一,如:白鷺引擎 - HTML5、Cocos-JS - HTML5、掌握物理系統(tǒng)、掌握精靈系統(tǒng)(地圖)、HTML5網(wǎng)頁游戲。
需要特別注意的是:Canvas作為HTML頁面的元素出現(xiàn)、在Canvas繪制的圖形與HTML頁面是無關(guān)的、利用DOM定位繪制的圖形、元素的事件不能綁定繪制的圖形
HTML頁面部分:定義<canvas>元素、建議使用width和height屬性設(shè)置<canvas>元素的寬度和高度
JavaScript部分:獲取HTML頁面中的<canvas>元素、通過getContext()方法創(chuàng)建畫布對象、該方法接收一個參數(shù) - 創(chuàng)建二維或三維圖形
需要特別注意的是:該參數(shù)為字符串類型、"2d"或"3d"中的"d"必須小寫、目前幾乎都是"2d"效果、使用Canvas提供的API完成需求。
fillRect(x,y,width,height) - 繪制實心矩形
x和y - 表示繪制矩形的左上角的坐標(biāo)值(x,y)
width - 表示繪制矩形的寬度
height - 表示繪制矩形的高度
strokeRect(x,y,width,height) - 繪制空心矩形
x和y - 表示繪制矩形的左上角的坐標(biāo)值(x,y)
width - 表示繪制矩形的寬度
height - 表示繪制矩形的高度
clearRect(x,y,width,height) - 清除指定區(qū)域的矩形
x和y - 表示繪制矩形的左上角的坐標(biāo)值(x,y)
width - 表示繪制矩形的寬度
height - 表示繪制矩形的高度
設(shè)置樣式
fillStyle - 設(shè)置填充樣式
strokeStyle - 設(shè)置描邊樣式
globalAlpha - 設(shè)置透明度(0-10-100-10-1000-10-1000000-10-10000-10-10000-10-10000-10-10000-10-1000-10-100000-100-100-1)
需要特別注意的是:先設(shè)置樣式,再繪制圖形,每改變一次樣式,都需要重新設(shè)置樣式,填充樣式與描邊樣式互不干擾
createLinearGradient(x1,y1,x2,y2)
線性漸變具有一個基準(zhǔn)線
射線(扇形)漸變
createRadialGradient(x1,y1,r1,x2,y2,r2)
射線漸變具有兩個基準(zhǔn)圓
設(shè)置漸變顏色
addColorStop(position,color)方法
color - 顏色
實現(xiàn)步驟如下:
1.設(shè)置線性漸變或扇形漸變
2.返回漸變對象
3.漸變對象設(shè)置漸變的顏色
4.設(shè)置填充或描邊樣式為漸變
設(shè)置屬性:font - 用法與CSS中的font一致
對齊方式:
textAlign - 水平對齊
left - 基準(zhǔn)線在文字的左邊
center - 基準(zhǔn)線在文字的中間
right - 基準(zhǔn)線在文字的右邊
textBaseline - 垂直對齊
top - 基準(zhǔn)線在文字的上邊
middle - 基準(zhǔn)線在文字的中間
bottom - 基準(zhǔn)線在文字的下邊
hanging - 懸掛基線
alphabetic - 字母基線
繪制方法
fillText(text,x,y) - 繪制實心文字
text - 設(shè)置繪制的文字內(nèi)容
x和y - 設(shè)置繪制文字的坐標(biāo)值
strokeText(text,x,y) - 繪制空心文字
text - 設(shè)置繪制的文字內(nèi)容
x和y - 設(shè)置繪制文字的坐標(biāo)值
設(shè)置陰影
shadowColor - 設(shè)置陰影顏色
shadowOffsetX - 設(shè)置陰影水平位置
正值 - 陰影向右移動、0 - 陰影不移動、負(fù)值 - 陰影向左移動
shadowOffsetY - 設(shè)置陰影垂直位置
正值 - 陰影向下移動、0 - 陰影不移動、負(fù)值 - 陰影向上移動
shadowBlur - 設(shè)置陰影的程度
值的類型為Number、值越大,陰影效果越明顯
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。