html5Canvas學習筆記 2 圓形

2022-09-11 15:39:19 字數 3368 閱讀 1752

與矩形相比,圓形相對複雜一點,它還需要建立路徑,而且每次結束後需要關閉路徑。

第一步:在獲取圖形上下文後,要先建立路徑:

cx.beginpath();//建立路徑

第二步:圓形函式:

cx.arc(x,y,r,start,end,anticlockwise);//圓形

這裡的引數:x和y和矩形一樣,都是代表距離原點的距離,r是圓形的半徑,start和end代表圓形開始的角度和結束的角度,anticlockwise代表是否逆時針畫圓,true代表是逆時針,false代表是順時針。

第三步:關閉路徑

cx.closepath();//關閉路徑

第四步:填充描邊顏色

cx.fillstyle=」#ffff00″;//填充顏色

cx.strokestyle=」#000″;//描邊

cx.fill();//填充圖形,和矩形不同這裡只需要呼叫fill,因為上述路徑已經確定圖形大小

cx.stroke();//描邊圖形,和矩形不同這裡只需要呼叫stroke,因為上述路徑已經確定圖形大小

1

var canvas=document.getelementbyid('canvas');

2if(canvas==undefined)

5var cx=canvas.getcontext('2d');

6 cx.beginpath();//

建立路徑

7 cx.arc(250,250,50,0,math.pi*2,false);//

圓形8 cx.closepath();//

關閉路徑

9 cx.fillstyle="#ffff00";//

填充顏色

10 cx.strokestyle="#000";//

描邊11 cx.fill();//

填充圖形,和矩形不同這裡只需要呼叫fill,因為上述路徑已經確定圖形大小

12 cx.stroke();//

描邊圖形,和矩形不同這裡只需要呼叫stroke,因為上述路徑已經確定圖形大小

結果是這樣的:

當然我們可以畫出不同角度的圓形:

當然這裡可能覺得有幾個問題:

1.為什麼畫出來的不是四分之一圓?這是因為路徑結束以後,它是把開始點和結束點進行直線連線,因此當你想畫出乙個四分之一圓的時候,你需要在圓形加多乙個點,這樣路徑進行直線連線的時候,才能畫出乙個四分之一圓,在後面的學習筆記中我將講下怎麼畫個四分之一圓。

2.逆時針時候,為什麼明明是pi*0.5卻畫出來乙個四分之三圓的?

從arc的**可以看到,圓形的角度是固定的,是定點的,start和end的角度不是說從start划過去多少個角度到end,而是它類似座標,只不過這個座標是在圓形周長上。

最後,我們來講乙個有趣的東西,如果我們不關閉路徑或者不建立路徑會是怎麼樣的效果呢?

首先我們來畫3個圓:

1

var canvas=document.getelementbyid('canvas');

2if(canvas==undefined)

5var cx=canvas.getcontext('2d');6/*

**畫黃色圓****

*/7 cx.beginpath();//

建立路徑

8 cx.arc(50,50,25,0,math.pi*2,false);//

圓形9 cx.closepath();//

關閉路徑

10 cx.fillstyle="#ffff00";//

填充顏色

11 cx.strokestyle="#000";//

描邊12 cx.fill();//

填充圖形,和矩形不同這裡只需要呼叫fill,因為上述路徑已經確定圖形大小

13 cx.stroke();//

描邊圖形,和矩形不同這裡只需要呼叫stroke,因為上述路徑已經確定圖形大小

14/*

**畫藍色圓****

*/15 cx.beginpath();//

建立路徑

16 cx.arc(150,50,25,0,math.pi*2,false);//

圓形17 cx.closepath();//

關閉路徑

18 cx.fillstyle="#1834f7";//

填充顏色

19 cx.strokestyle="#000";//

描邊20 cx.fill();//

填充圖形,和矩形不同這裡只需要呼叫fill,因為上述路徑已經確定圖形大小

21 cx.stroke();//

描邊圖形,和矩形不同這裡只需要呼叫stroke,因為上述路徑已經確定圖形大小

22/*

**畫黑色圓****

*/23 cx.beginpath();//

建立路徑

24 cx.arc(100,100,25,0,math.pi*2,false);//

圓形25 cx.closepath();//

關閉路徑

26 cx.fillstyle="#000";//

填充顏色

27 cx.strokestyle="#000";//

描邊28 cx.fill();//

填充圖形,和矩形不同這裡只需要呼叫fill,因為上述路徑已經確定圖形大小

29 cx.stroke();//

描邊圖形,和矩形不同這裡只需要呼叫stroke,因為上述路徑已經確定圖形大小

接著我們把藍色的beginpath去掉或者把黑色的beginpath去掉,或者乾脆把後面二個的beginpath都去掉,會是怎麼樣的呢?

從這裡我們可以看到一些資訊:

1.我們要知道路徑都有乙個開始點和結束點,當我們去掉藍色的開始點時候,我們可以知道,在畫出了黃色圓時候結束後,畫藍色圓並沒有開始點,這意味著:

開始點還是在黃色圓上,因此在畫藍色圓時候,它會從開始點開始畫,而路徑已經有了乙個圓,在這個路徑下,會先走一遍路徑然後繼續畫圓,因此黃色圓會被重繪,然後填充的時候填充了2個藍色的圓,因此可以得到如圖的2個藍色圓。

2.同理我們可以知道2個黑圓,3個黑圓是怎麼來的,2個黑圓的開始點是在藍色圓上,因此畫出來2個黑色從藍色圓開始的。

在畫出來3個黑圓時候,筆者發現和預想的不一樣,為什麼黃色和黑色的有線連線而不是藍色和黑色?

重新看了一次才知道,因為三個圓都是關閉了路徑colsepath,這意味著:

每一次closepath後,下次畫圓都是從開始點開始畫,因此上述在畫黑圓時候,是從開始點黃色圓那邊開始畫,畫完藍色後回到黃色圓然後畫黑色圓。如果要藍圓和黑圓之間有線連線,需要把藍色圓的closepath去掉。

這裡為了看得清楚,我把填充的去掉,可以看到,黃圓連線到藍圓然後連線到黑圓,最後黑圓一旦關閉路徑colsepath,路徑將回到開始點,因此黑圓和黃圓也被連線起來。

HTML5 canvas畫布 學習例項

如圖 如下 js 如下 tankgame2.js 我的坦克hero function hero x,y,direct 右移 this.moveright function 下移 this.movedown function 左移 this.moveleft function 畫坦克 function...

Html5 Canvas學習之路(三)

合成是指如何精細控制畫布上物件的透明度和分層效果。有兩個屬性可以控制合成操作 globalalpha canvas屬性用來表示透明度,它的預設值為1.0 完全不透明 並且可以設定從0.0到1.0的值,這項canvas屬性必須在圖形繪製之前設定。globalcompositeoperation屬性用來...

HTML5 Canvas學習筆記之詳解弧線的繪製

canvas翻譯過來呢就是畫布 所以canvas的作用就是把網頁當成一張畫布,在其中畫畫 說實話h5中最令我感興趣的就是canvas了。id canvas style height 100 當前瀏覽器不支援canvas,請更換瀏覽器後再試 canvas 這裡先說canvas的幾個屬性 window....