主頁 > 知識庫 > 通過HTML5 Canvas API繪制弧線和圓形的教程

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

熱門標(biāo)簽:外呼系統(tǒng)電話怎么投訴 邢臺縣地圖標(biāo)注app 阜陽企業(yè)外呼系統(tǒng) 外呼線穩(wěn)定線路 呼和浩特外呼電銷系統(tǒng)排名 pageadm實(shí)現(xiàn)地圖標(biāo)注 申請400電話流程簡介 南通數(shù)據(jù)外呼系統(tǒng)推廣 地圖標(biāo)注位置能賺錢嗎

在html5中,CanvasRenderingContext2D對象也提供了專門用于繪制圓形或弧線的方法,請參考以下屬性和方法介紹:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. arc(x, y, radius, startRad, endRad, anticlockwise)  

在canvas畫布上繪制以坐標(biāo)點(diǎn)(x,y)為圓心、半徑為radius的圓上的一段弧線。這段弧線的起始弧度是startRad,結(jié)束弧度是endRad。這里的弧度是以x軸正方向(時(shí)鐘三點(diǎn)鐘)為基準(zhǔn)、進(jìn)行順時(shí)針旋轉(zhuǎn)的角度來計(jì)算的。anticlockwise表示是以逆時(shí)針方向還是順時(shí)針方向開始繪制,如果為true則表示逆時(shí)針,如果為false則表示順時(shí)針。anticlockwise參數(shù)是可選的,默認(rèn)為false,即順時(shí)針。

arc()方法中的弧度計(jì)算方式

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. arcTo(x1, y1, x2, y2, radius)  

這個(gè)方法將利用當(dāng)前端點(diǎn)、端點(diǎn)1(x1,y1)和端點(diǎn)2(x2,y2)這三個(gè)點(diǎn)所形成的夾角,然后繪制一段與夾角的兩邊相切并且半徑為radius的圓上的弧線。一般情況下,繪制弧線的開始位置是當(dāng)前端點(diǎn),結(jié)束位置是端點(diǎn)2,并且弧線繪制的方向就是連接這兩個(gè)端點(diǎn)的最短圓弧的方向。此外,如果當(dāng)前端點(diǎn)不在所指定的圓上,本方法還將繪制一條從當(dāng)前端點(diǎn)到弧線起點(diǎn)的直線。
由于詳細(xì)介紹arcTo()方法的篇幅較多,請移步至這里查看arcTo()的詳細(xì)用法。

在了解了canvas繪制弧線的上述API之后,我們就一起來看看如何使用arc()繪制弧線。我們已經(jīng)知道,arc()接收的第4個(gè)和第5個(gè)參數(shù)表示繪制弧線的開始弧度和結(jié)束弧度。相信各位讀者在學(xué)校的數(shù)學(xué)或幾何課程上都學(xué)過弧度,弧度是一種角度單位。弧長等于半徑的弧,其所對的圓心角就是1弧度。我們還知道,半徑為r的圓,其周長為2πr。在具備這些幾何知識的前提下,我們就可以使用arc()方法繪制弧線了。

使用canvas繪制弧線

現(xiàn)在,我們就來繪制一條半徑為50px的圓的1/4弧線。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE html>   
  2. <html>   
  3. <head>   
  4. <meta charset="UTF-8">   
  5. <title>HTML5 Canvas繪制弧線入門示例</title>   
  6. </head>   
  7. <body>   
  8.   
  9. <!-- 添加canvas標(biāo)簽,并加上紅色邊框以便于在頁面上查看 -->   
  10. <canvas id="myCanvas" width="400px" height="300px" style="border: 1px solid red;">   
  11. 您的瀏覽器不支持canvas標(biāo)簽。   
  12. </canvas>   
  13.   
  14. <script type="text/javascript">   
  15. //獲取Canvas對象(畫布)   
  16. var canvas = document.getElementById("myCanvas");   
  17. //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯(cuò)誤   
  18. if(canvas.getContext){     
  19.     //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)   
  20.     var ctx = canvas.getContext("2d");     
  21.        
  22.     //開始一個(gè)新的繪制路徑   
  23.     ctx.beginPath();   
  24.     //設(shè)置弧線的顏色為藍(lán)色   
  25.     ctx.strokeStyle = "blue";   
  26.     var circle = {   
  27.         x : 100,    //圓心的x軸坐標(biāo)值   
  28.         y : 100,    //圓心的y軸坐標(biāo)值   
  29.         r : 50      //圓的半徑   
  30.     };   
  31.     //沿著坐標(biāo)點(diǎn)(100,100)為圓心、半徑為50px的圓的順時(shí)針方向繪制弧線   
  32.     ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, false);       
  33.     //按照指定的路徑繪制弧線   
  34.     ctx.stroke();   
  35. }   
  36. </script>   
  37. </body>   
  38. </html>  

對應(yīng)的顯示效果如下圖:

使用canvas沿著順時(shí)針方向繪制弧線
如上所示,我們設(shè)置了繪制的弧線的所在圓的圓心坐標(biāo)為(100,100),半徑為50px。由于一個(gè)半徑為r的圓的周長為2πr,也就是說,一個(gè)完整的圓,其所對應(yīng)的弧度為2π(換算成常規(guī)角度就是360°),所以我們想要畫一個(gè)圓的1/4弧線,只要弧度為π/2(即90°)就可以了。在上面的代碼中,我們使用了JavaScript中表示π的常量Math.PI。

此外,在上面的代碼中,我們還設(shè)置了繪制弧線的方向?yàn)轫槙r(shí)針方向(false)。由于起始弧度為0,結(jié)束弧度為π/2,因此弧線將從x軸的正方向開始沿著順時(shí)針方向繪制,從而得到上面的圖形。如果我們將上述代碼中的弧線繪制方向改為逆時(shí)針,會(huì)有什么樣的效果呢?

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <script type="text/javascript">   
  2. //獲取Canvas對象(畫布)   
  3. var canvas = document.getElementById("myCanvas");   
  4. //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯(cuò)誤   
  5. if(canvas.getContext){     
  6.     //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)   
  7.     var ctx = canvas.getContext("2d");     
  8.        
  9.     //開始一個(gè)新的繪制路徑   
  10.     ctx.beginPath();   
  11.     //設(shè)置弧線的顏色為藍(lán)色   
  12.     ctx.strokeStyle = "blue";   
  13.     var circle = {   
  14.         x : 100,    //圓心的x軸坐標(biāo)值   
  15.         y : 100,    //圓心的y軸坐標(biāo)值   
  16.         r : 50      //圓的半徑   
  17.     };   
  18.     //沿著坐標(biāo)點(diǎn)(100,100)為圓心、半徑為50px的圓的逆時(shí)針方向繪制弧線   
  19.     ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI / 2, true);       
  20.     //按照指定的路徑繪制弧線   
  21.     ctx.stroke();   
  22. }   
  23. </script>  

對應(yīng)的顯示效果如下:

使用canvas沿著逆時(shí)針方向繪制弧線


使用canvas繪制圓形

當(dāng)我們學(xué)會(huì)了繪制弧線之后,舉一反三,我們想要繪制圓形自然也不在話下,只需要將上述代碼的結(jié)束弧度改為2π即可。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <script type="text/javascript">   
  2. //獲取Canvas對象(畫布)   
  3. var canvas = document.getElementById("myCanvas");   
  4. //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯(cuò)誤   
  5. if(canvas.getContext){     
  6.     //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)   
  7.     var ctx = canvas.getContext("2d");     
  8.        
  9.     //開始一個(gè)新的繪制路徑   
  10.     ctx.beginPath();   
  11.     //設(shè)置弧線的顏色為藍(lán)色   
  12.     ctx.strokeStyle = "blue";   
  13.     var circle = {   
  14.         x : 100,    //圓心的x軸坐標(biāo)值   
  15.         y : 100,    //圓心的y軸坐標(biāo)值   
  16.         r : 50      //圓的半徑   
  17.     };   
  18.     //以canvas中的坐標(biāo)點(diǎn)(100,100)為圓心,繪制一個(gè)半徑為50px的圓形   
  19.     ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);       
  20.     //按照指定的路徑繪制弧線   
  21.     ctx.stroke();   
  22. }   
  23. </script>  

對應(yīng)的顯示效果如下:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <script type="text/javascript">   
  2. //獲取Canvas對象(畫布)   
  3. var canvas = document.getElementById("myCanvas");   
  4. //簡單地檢測當(dāng)前瀏覽器是否支持Canvas對象,以免在一些不支持html5的瀏覽器中提示語法錯(cuò)誤   
  5. if(canvas.getContext){     
  6.     //獲取對應(yīng)的CanvasRenderingContext2D對象(畫筆)   
  7.     var ctx = canvas.getContext("2d");     
  8.        
  9.     //開始一個(gè)新的繪制路徑   
  10.     ctx.beginPath();   
  11.     //設(shè)置弧線的顏色為藍(lán)色   
  12.     ctx.strokeStyle = "blue";   
  13.     var circle = {   
  14.         x : 100,    //圓心的x軸坐標(biāo)值   
  15.         y : 100,    //圓心的y軸坐標(biāo)值   
  16.         r : 50      //圓的半徑   
  17.     };   
  18.     //以canvas中的坐標(biāo)點(diǎn)(100,100)為圓心,繪制一個(gè)半徑為50px的圓形   
  19.     ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);       
  20.     //按照指定的路徑繪制弧線   
  21.     ctx.stroke();   
  22. }   
  23. </script>  

備注:arc()方法中的起始弧度參數(shù)startRad和結(jié)束弧度參數(shù)endRad都是以弧度為單位,即使你填入一個(gè)數(shù)字,例如360,仍然會(huì)被看作是360弧度。將上述代碼的結(jié)束弧度設(shè)為360會(huì)產(chǎn)生什么用的后果呢?這就要看繪制的方向了(即anticlockwise參數(shù)的值),如果是順時(shí)針繪制(false),則將繪制出一個(gè)完整的圓形;如果是逆時(shí)針繪制,大于2π的弧度將被轉(zhuǎn)換為一個(gè)弧度相等、但不大于2π的弧度。例如,將上述代碼中的結(jié)束弧度設(shè)為3π(Math.PI * 3),如果anticlockwise為false,將會(huì)顯示為一個(gè)完整的圓形,如果為true,則其顯示效果與設(shè)為π時(shí)的顯示效果一致。

結(jié)束弧度設(shè)為3π時(shí),順時(shí)針(false)旋轉(zhuǎn)的繪制效果

結(jié)束弧度設(shè)為3π時(shí),逆時(shí)針(true)旋轉(zhuǎn)的繪制效果

標(biāo)簽:黃山 楊凌 鶴崗 蚌埠 內(nèi)蒙古 撫順 德州 辛集

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《通過HTML5 Canvas API繪制弧線和圓形的教程》,本文關(guān)鍵詞  通過,HTML5,Canvas,API,繪制,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《通過HTML5 Canvas API繪制弧線和圓形的教程》相關(guān)的同類信息!
  • 本頁收集關(guān)于通過HTML5 Canvas API繪制弧線和圓形的教程的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章