HTML5新元素canvas詳解

canvas是HTML5新添加的元素。這個(gè)元素負(fù)責(zé)在頁(yè)面中設(shè)定一個(gè)區(qū)域,然后通過(guò)JavaScript動(dòng)態(tài)的繪制圖形。

1.創(chuàng)建canvas元素

<canvas width="200" height="200"id="drawing"></canvas>

2.判斷瀏覽器是否支持canvas元素

indow.onload=function(){
    var drawing = document.getElementById("drawing")
    if(drawing.getContext){ //如果支持
        var context = drawing.getContext("2d")
         //取得繪圖上下文對(duì)象的引用
    }
}

3.繪制矩形

使用fillRect()方法,會(huì)填充矩形

window.onload=function(){
        var drawing = document.getElementById("drawing")
        if(drawing.getContext){
            console.log("support canvas")
            var context = drawing.getContext("2d")
            context.fillStyle = "#0000ff"
            context.fillRect(0,0,100,100)
        }
    }

使用strokeRect()方法,可以繪制邊框

context.strokeStyle = "red"
context.strokeRect(20,20,100,100)

最后使用strokeClear()方法可以清除畫(huà)布上的矩形區(qū)域

context.clearRect(30,30,100,100)

4.繪制路徑

首先調(diào)用beginPath()方法,表示要開(kāi)始繪制新路徑。然后調(diào)用以下方法繪制路徑。

繪制一條曲線:

arc(x,y,radius,radius,startAngle,endAngle,counterclockwise)
  • (x,y)為圓心
  • radius 半徑
  • startAngle,endAngle代表起始和結(jié)束的弧度
  • 最后一個(gè)參數(shù)代表是否按逆時(shí)針計(jì)算,值為false時(shí)為逆時(shí)針
arcTo(x1,y1,x2,y2,radius): 從(x1,y1)開(kāi)始繪制一條弧線到(x2,y2)為止。

bezierCurveTo(c1x,c1y,c2x,c2y,x,y): 從上一點(diǎn)開(kāi)始繪制一條曲線,到(x,y)為止,并以(c1x,c1y)(c2x,c2y)位控制點(diǎn)

lineTo(x,y): 從上一點(diǎn)開(kāi)始繪制一條直線,到(x,y)為止。

moveTo(x,y): 將繪圖游標(biāo)移動(dòng)到(x,y),不畫(huà)線

quadraticCurveTo(cx,cy,x,y): 從上一點(diǎn)繪制一條二次曲線,到(x,y)為止,并以(cx,cy)做控制點(diǎn)

rect(x,y,width,height): 從點(diǎn)(x,y)開(kāi)始繪制一個(gè)矩形,寬度和高度由width和height指定

繪制完路徑后,可以使用fill()填充當(dāng)前路徑。clip()方法在畫(huà)布上創(chuàng)建一個(gè)剪切區(qū)域。closePath()連接到路徑起點(diǎn)。stroke()對(duì)路徑進(jìn)行描邊

5.繪制文本

主要使用fillText()和strokeText()方法,都以下的3個(gè)屬性作為基礎(chǔ)

  • font:文本樣式、大小及字體
  • textAlign: 文本對(duì)齊方式
  • textBaseline: 文本的基線

示例:

context.font = "bold 20px Arial"
context.textAlign = "center"
context.textBaseline = "middle"
context.fillText("hello",100,100)

結(jié)果:
text_center
text_center

修改 textAlign屬性為end后,

結(jié)果:
text_end
text_end

由此可見(jiàn),textAlign控制文本在x坐標(biāo)的右邊中間還是左邊。

同理,textBaseLine屬性可以調(diào)整垂直對(duì)齊方式。

6.變換

函數(shù) 說(shuō)明
rotate(angle) 圍繞原點(diǎn)旋轉(zhuǎn)圖像angle弧度
scale(scaleX,scaleY) 縮放圖像,x,y分別乘以scaleX,scaleY,默認(rèn)為1.0
translate(x,y) 將坐標(biāo)原點(diǎn)移動(dòng)到(x,y)
transform(m1_1,m1_2,m2_1,m2_2,dx,dy) 修改變換矩陣
setTransfrom(m1_1,m1_2,m2_1,m2_2,dx,dy) 將變換矩陣重置為默認(rèn)狀態(tài),再調(diào)用transform

7.繪制圖像

使用drawImage()方法繪制圖像,根據(jù)傳入?yún)?shù)的不同,可以繪制出不同的效果。

var image = document.images[0]
context.draw(image,x,y)    //圖像,起點(diǎn)
context.draw(image,x,y,width,height) //在上個(gè)函數(shù)的基礎(chǔ)上加上目標(biāo)圖像的寬度和高度
context.draw(image,x,y,width,height,x,y,width,height)
//在上個(gè)函數(shù)基礎(chǔ)上加上了源圖像的地點(diǎn)和寬度、高度

示例:

window.onload=function(){
        var drawing = document.getElementById("drawing")
        if(drawing.getContext){
            console.log("support canvas")
            var context = drawing.getContext("2d")
            var image = document.images[0];
            context.drawImage(image,0,0)
        }

結(jié)果(左側(cè)為img元素,右側(cè)為canvas):

drawImage1
drawImage1

修改 drawImage函數(shù)的參數(shù)后:

context.drawImage(image,0,0,150,200)

結(jié)果:

drawImage2
drawImage2

可以看出已經(jīng)正常顯示了。

8.陰影

屬性 說(shuō)明
shadowColor 陰影顏色,默認(rèn)為黑色
shadowOffsetX x軸方向的偏移
shadowOffsetY y軸方向的偏移
shadowBlur 模糊的像素?cái)?shù),默認(rèn)為0

9.漸變

漸變可以填充在矩形, 圓形, 線條, 文本等等, 各種形狀可以自己定義不同的顏色。
以下有兩種不同的方式來(lái)設(shè)置Canvas漸變:

  • createLinearGradient(x,y,x1,y1) - 創(chuàng)建線條漸變
  • createRadialGradient(x,y,r,x1,y1,r1) - 創(chuàng)建一個(gè)徑向/圓漸變

當(dāng)我們使用漸變對(duì)象,必須使用兩種或兩種以上的停止顏色。
addColorStop()方法指定顏色停止,參數(shù)使用坐標(biāo)來(lái)描述,可以是0至1.
使用漸變,設(shè)置fillStyle或strokeStyle的值為 漸變,然后繪制形狀,如矩形,文本,或一條線。
——菜鳥(niǎo)教程

10.模式

利用createPattern函數(shù)可以繪制重復(fù)的圖像

var context = drawing.getContext("2d")
var image = document.images[0];
pattern = context.createPattern(image,"repeat")
context.fillStyle=pattern
context.fillRect(0,0,200,200)

結(jié)果:

createPattern
createPattern

11.合成

globalAlpha     //介于0到1之間的值,全局透明度
globalCompositionOperation  //后繪制的圖形怎樣與先繪制的圖形結(jié)合

參考書(shū)《JavaScript高級(jí)程序設(shè)計(jì)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一:canvas簡(jiǎn)介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,883評(píng)論 2 32
  • 一、canvas簡(jiǎn)介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    Looog閱讀 4,053評(píng)論 3 40
  • 一、canvas簡(jiǎn)介 1.1 什么是canvas?(了解) 是HTML5提供的一種新標(biāo)簽 Canvas是一個(gè)矩形區(qū)...
    J_L_L閱讀 1,697評(píng)論 0 4
  • 書(shū)中代碼示例效果展示:Core HTML5 Canvas Examples 基礎(chǔ)知識(shí) canvas元素 canva...
    szu_bee閱讀 3,066評(píng)論 2 28
  • 本章內(nèi)容 理解 元素 繪制簡(jiǎn)單的 2D 圖形 使用 WebGL 繪制 3D 圖形 這個(gè)元素負(fù)責(zé)在頁(yè)面中設(shè)定一個(gè)區(qū)域...
    悶油瓶小張閱讀 999評(píng)論 0 0

友情鏈接更多精彩內(nèi)容