通過HTML5 Canvas API繪制弧線和圓形的教程

在html5中,CanvasRenderingContext2D對象也提供了專門用于繪制圓形或弧線的方法,請參考以下屬性和方法介紹:
- arc(x, y, radius, startRad, endRad, anticlockwise)
在canvas畫布上繪制以坐標(biāo)點(x,y)為圓心、半徑為radius的圓上的一段弧線。這段弧線的起始弧度是startRad,結(jié)束弧度是endRad。這里的弧度是以x軸正方向(時鐘三點鐘)為基準(zhǔn)、進(jìn)行順時針旋轉(zhuǎn)的角度來計算的。anticlockwise表示是以逆時針方向還是順時針方向開始繪制,如果為true則表示逆時針,如果為false則表示順時針。anticlockwise參數(shù)是可選的,默認(rèn)為false,即順時針。
arc()方法中的弧度計算方式
- arcTo(x1, y1, x2, y2, radius)
這個方法將利用當(dāng)前端點、端點1(x1,y1)和端點2(x2,y2)這三個點所形成的夾角,然后繪制一段與夾角的兩邊相切并且半徑為radius的圓上的弧線。一般情況下,繪制弧線的開始位置是當(dāng)前端點,結(jié)束位置是端點2,并且弧線繪制的方向就是連接這兩個端點的最短圓弧的方向。此外,如果當(dāng)前端點不在所指定的圓上,本方法還將繪制一條從當(dāng)前端點到弧線起點的直線。
由于詳細(xì)介紹arcTo()方法的篇幅較多,請移步至這里查看arcTo()的詳細(xì)用法。
在了解了canvas繪制弧線的上述API之后,我們就一起來看看如何使用arc()繪制弧線。我們已經(jīng)知道,arc()接收的第4個和第5個參數(shù)表示繪制弧線的開始弧度和結(jié)束弧度。相信各位讀者在學(xué)校的數(shù)學(xué)或幾何課程上都學(xué)過弧度,弧度是一種角度單位?;¢L等于半徑的弧,其所對的圓心角就是1弧度。我們還知道,半徑為r的圓,其周長為2πr。在具備這些幾何知識的前提下,我們就可以使用arc()方法繪制弧線了。
使用canvas繪制弧線
現(xiàn)在,我們就來繪制一條半徑為50px的圓的1/4弧線。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>HTML5 Canvas繪制弧線入門示例</title>
- </head>
- <body>
- <!-- 添加canvas標(biāo)簽,并加上紅色邊框以便于在頁面上查看 -->
- <canvas id="myCanvas" width="400px" height="300px" style="border: 1px solid red;">
- 您的瀏覽器不支持canvas標(biāo)簽。
- </canvas>
- <script type="text/javascript">
- //獲取Canvas對象(畫布)
- var canvas = document.getElementById("myCanvas");
- //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯誤
- if(canvas.getContext){
- //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)
- var ctx = canvas.getContext("2d");
- //開始一個新的繪制路徑
- ctx.beginPath();
- //設(shè)置弧線的顏色為藍(lán)色
- ctx.strokeStyle = "blue";
- var circle = {
- x : 100, //圓心的x軸坐標(biāo)值
- y : 100, //圓心的y軸坐標(biāo)值
- r : 50 //圓的半徑
- };
- //沿著坐標(biāo)點(100,100)為圓心、半徑為50px的圓的順時針方向繪制弧線
- ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, false);
- //按照指定的路徑繪制弧線
- ctx.stroke();
- }
- </script>
- </body>
- </html>
對應(yīng)的顯示效果如下圖:
使用canvas沿著順時針方向繪制弧線
如上所示,我們設(shè)置了繪制的弧線的所在圓的圓心坐標(biāo)為(100,100),半徑為50px。由于一個半徑為r的圓的周長為2πr,也就是說,一個完整的圓,其所對應(yīng)的弧度為2π(換算成常規(guī)角度就是360°),所以我們想要畫一個圓的1/4弧線,只要弧度為π/2(即90°)就可以了。在上面的代碼中,我們使用了JavaScript中表示π的常量Math.PI。
此外,在上面的代碼中,我們還設(shè)置了繪制弧線的方向為順時針方向(false)。由于起始弧度為0,結(jié)束弧度為π/2,因此弧線將從x軸的正方向開始沿著順時針方向繪制,從而得到上面的圖形。如果我們將上述代碼中的弧線繪制方向改為逆時針,會有什么樣的效果呢?
- <script type="text/javascript">
- //獲取Canvas對象(畫布)
- var canvas = document.getElementById("myCanvas");
- //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯誤
- if(canvas.getContext){
- //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)
- var ctx = canvas.getContext("2d");
- //開始一個新的繪制路徑
- ctx.beginPath();
- //設(shè)置弧線的顏色為藍(lán)色
- ctx.strokeStyle = "blue";
- var circle = {
- x : 100, //圓心的x軸坐標(biāo)值
- y : 100, //圓心的y軸坐標(biāo)值
- r : 50 //圓的半徑
- };
- //沿著坐標(biāo)點(100,100)為圓心、半徑為50px的圓的逆時針方向繪制弧線
- ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, true);
- //按照指定的路徑繪制弧線
- ctx.stroke();
- }
- </script>
對應(yīng)的顯示效果如下:
使用canvas沿著逆時針方向繪制弧線
使用canvas繪制圓形
當(dāng)我們學(xué)會了繪制弧線之后,舉一反三,我們想要繪制圓形自然也不在話下,只需要將上述代碼的結(jié)束弧度改為2π即可。
- <script type="text/javascript">
- //獲取Canvas對象(畫布)
- var canvas = document.getElementById("myCanvas");
- //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯誤
- if(canvas.getContext){
- //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)
- var ctx = canvas.getContext("2d");
- //開始一個新的繪制路徑
- ctx.beginPath();
- //設(shè)置弧線的顏色為藍(lán)色
- ctx.strokeStyle = "blue";
- var circle = {
- x : 100, //圓心的x軸坐標(biāo)值
- y : 100, //圓心的y軸坐標(biāo)值
- r : 50 //圓的半徑
- };
- //以canvas中的坐標(biāo)點(100,100)為圓心,繪制一個半徑為50px的圓形
- ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);
- //按照指定的路徑繪制弧線
- ctx.stroke();
- }
- </script>
對應(yīng)的顯示效果如下:
- <script type="text/javascript">
- //獲取Canvas對象(畫布)
- var canvas = document.getElementById("myCanvas");
- //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯誤
- if(canvas.getContext){
- //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)
- var ctx = canvas.getContext("2d");
- //開始一個新的繪制路徑
- ctx.beginPath();
- //設(shè)置弧線的顏色為藍(lán)色
- ctx.strokeStyle = "blue";
- var circle = {
- x : 100, //圓心的x軸坐標(biāo)值
- y : 100, //圓心的y軸坐標(biāo)值
- r : 50 //圓的半徑
- };
- //以canvas中的坐標(biāo)點(100,100)為圓心,繪制一個半徑為50px的圓形
- ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);
- //按照指定的路徑繪制弧線
- ctx.stroke();
- }
- </script>
備注:arc()方法中的起始弧度參數(shù)startRad和結(jié)束弧度參數(shù)endRad都是以弧度為單位,即使你填入一個數(shù)字,例如360,仍然會被看作是360弧度。將上述代碼的結(jié)束弧度設(shè)為360會產(chǎn)生什么用的后果呢?這就要看繪制的方向了(即anticlockwise參數(shù)的值),如果是順時針繪制(false),則將繪制出一個完整的圓形;如果是逆時針繪制,大于2π的弧度將被轉(zhuǎn)換為一個弧度相等、但不大于2π的弧度。例如,將上述代碼中的結(jié)束弧度設(shè)為3π(Math.PI * 3),如果anticlockwise為false,將會顯示為一個完整的圓形,如果為true,則其顯示效果與設(shè)為π時的顯示效果一致。
結(jié)束弧度設(shè)為3π時,順時針(false)旋轉(zhuǎn)的繪制效果
結(jié)束弧度設(shè)為3π時,逆時針(true)旋轉(zhuǎn)的繪制效果
相關(guān)文章
html5的畫布canvas——畫出弧線、旋轉(zhuǎn)的圖形實例代碼+效果圖
在做旋轉(zhuǎn)操作之前一定要理解一句話:旋轉(zhuǎn)的是畫布的坐標(biāo)系而不是圖形本身,首先認(rèn)識一下畫圓的坐標(biāo):中心、起始角、結(jié)束角;接下來的就很簡單了2013-06-09HTML5+Canvas實現(xiàn)日期圓形時鐘特效源碼
HTML5+Canvas實現(xiàn)日期圓形時鐘特效源碼是一款可以全屏漂浮,帶有日期星期顯示的時鐘代碼,外觀非常漂亮,需要的朋友前來下載源碼2016-03-07HTML5 canvas實現(xiàn)漸變色圓形進(jìn)度條特效源碼
HTML5 canvas實現(xiàn)漸變色圓形進(jìn)度條動畫是一款帶漸變色的圓形進(jìn)度條動畫特效jQuery插件jquery-circle-progress,進(jìn)度條使用漸變色來填充2016-02-16基于html5 canvas實現(xiàn)圓形轉(zhuǎn)盤抽獎特效源碼
基于html5 canvas實現(xiàn)圓形轉(zhuǎn)盤抽獎特效源碼是一款無需jQuery/js就可以實現(xiàn)的抽獎轉(zhuǎn)盤代碼,點擊立即抽獎(start)轉(zhuǎn)盤轉(zhuǎn)動,紅色指向表示中獎,需要的朋友前來下載源碼2016-01-15html5基于canvas實現(xiàn)的圓形時鐘效果源碼
這是一款使用html5基于canvas實現(xiàn)的圓形時鐘效果源碼,可實現(xiàn)實時顯示當(dāng)前時間的功能,時鐘表盤上同步對應(yīng)高亮顯示上午(AM)或下午(PM)。且指針轉(zhuǎn)動流暢自然,效果逼真。該2016-01-08html5使用canvas實現(xiàn)的圓形漸變進(jìn)度條加載動畫特效源碼
這是一款基于html5使用canvas實現(xiàn)的圓形漸變進(jìn)度條加載動畫特效源碼,圓形漸變動畫呈現(xiàn)動態(tài)變換效果?;赾anvas實現(xiàn)2015-12-22基于HTML5 Canvas實現(xiàn)圓形帶百分比進(jìn)度條特效源碼
腳本簡介html5 canvas圓形進(jìn)度條動畫特效是一款基于canvas生成的百分比進(jìn)度條動畫效果下載2015-12-04基于HTML5 canvas圓形倒計時器jQuery插件源碼 多款效果
本代碼是一款基于html5 canvas的圓形倒計時器jQuery插件。它可以使你非常輕松的創(chuàng)建圓形的倒計時器。該jQuery倒計時器插件有12種themes2015-11-03html5基于canvas實現(xiàn)的圓形計時器特效源碼
這是一款html5基于canvas實現(xiàn)的圓形計時器特效源碼,是一款簡單實用的帶有開始暫停按鈕的60秒一分鐘圓形計時器代碼。點擊開始即可進(jìn)入倒計時,畫面效果呈現(xiàn)又圓形到扇形收2015-11-03- 這篇文章主要介紹了HTML5 Canvas中繪制橢圓的4種方法,本文講解了參數(shù)方程法、均勻壓縮法、三次貝塞爾曲線法、光柵法等4種方法,需要的朋友可以參考下2015-04-24