主頁(yè) > 知識(shí)庫(kù) > 使用HTML5 Canvas API繪制弧線的教程

使用HTML5 Canvas API繪制弧線的教程

熱門標(biāo)簽:聯(lián)通400電話申請(qǐng) 西寧智能外呼系統(tǒng)加盟 電視購(gòu)物電銷外呼系統(tǒng) 杭州營(yíng)銷電銷機(jī)器人供應(yīng)商 高德地圖標(biāo)注賓館位置 飛亞外呼系統(tǒng) 貸款電銷人工和機(jī)器人哪個(gè)好 百應(yīng)電銷機(jī)器人產(chǎn)業(yè) 電話機(jī)器人如何

繪制標(biāo)準(zhǔn)圓弧

在開(kāi)始之前,我們優(yōu)化一下我們的作圖環(huán)境。靈感來(lái)自于上節(jié)課的紋理,如果不喜歡這個(gè)背景,我在images目錄下還提供了其他的背景圖,供大家選擇。另外把所有的樣式表都寫在了<head>下。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>新的畫(huà)布</title>   
  6.     <style>   
  7.         body { background: url("./images/bg3.jpg") repeat; }  
  8.         #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }   
  9.     </style>   
  10. </head>   
  11. <body>   
  12. <div id="canvas-warp">   
  13.     <canvas id="canvas">   
  14.         你的瀏覽器居然不支持Canvas?!趕快換一個(gè)吧!!   
  15.     </canvas>   
  16. </div>   
  17.   
  18. <script>   
  19.     window.onload = function(){   
  20.         var canvas = document.getElementById("canvas");   
  21.         canvas.width = 800;   
  22.         canvas.height = 600;   
  23.         var context = canvas.getContext("2d");   
  24.         context.fillStyle = "#FFF";   
  25.         context.fillRect(0,0,800,600);   
  26.   
  27.     }   
  28. </script>   
  29. </body>   
  30. </html>  

運(yùn)行結(jié)果:

之所以要繪制一個(gè)空白的矩形填滿畫(huà)布,是因?yàn)槲覀冎罢f(shuō)過(guò),canvas是透明的,如果不設(shè)置背景色,那么它就會(huì)被我設(shè)置的<body>紋理所覆蓋,想要使其擁有背景色(白色),只有繪制矩形覆蓋canvas這一個(gè)方法。

怎么樣,是不是非常的酷?

使用arc()繪制圓弧
arc()的使用方法如下:

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

前面三個(gè)參數(shù),分別是圓心坐標(biāo)與圓半徑。startAngle、endAngle使用的是弧度值,不是角度值?;《鹊囊?guī)定是絕對(duì)的,如下圖。

anticlockwise表示繪制的方法,是順時(shí)針還是逆時(shí)針繪制。它傳入布爾值,true表示逆時(shí)針繪制,false表示順時(shí)針繪制,缺省值為false。

弧度的規(guī)定是絕對(duì)的,什么意思呢?就是指你要繪制什么樣的圓弧,弧度直接按上面的那個(gè)標(biāo)準(zhǔn)填就行了。

比如你繪制 0.5pi ~ 1pi 的圓弧,如果順時(shí)針畫(huà),就只是左下角那1/4個(gè)圓??;如果逆時(shí)針畫(huà),就是與之互補(bǔ)的右上角的3/4圓弧。此處自己嘗試,不再舉例。

使用切點(diǎn)繪制圓弧

arcTo()介紹:
arcTo()方法接收5個(gè)參數(shù),分別是兩個(gè)切點(diǎn)的坐標(biāo)和圓弧半徑。這個(gè)方法是依據(jù)切線畫(huà)弧線,即由兩個(gè)切線確定一條弧線。
具體如下。

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

這個(gè)函數(shù)以給定的半徑繪制一條弧線,圓弧的起點(diǎn)與當(dāng)前路徑的位置到(x1, y1)點(diǎn)的直線相切,圓弧的終點(diǎn)與(x1, y1)點(diǎn)到(x2, y2)的直線相切。因此其通常配合moveTo()或lineTo()使用。其能力是可以被更為簡(jiǎn)單的arc()替代的,其復(fù)雜就復(fù)雜在繪制方法上使用了切點(diǎn)。

使用切點(diǎn)繪制弧線:
下面的案例我把切線也繪制出來(lái)了,看的更清楚一些。

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. <!DOCTYPE html>   
  2. <html lang="zh">   
  3. <head>   
  4.     <meta charset="UTF-8">   
  5.     <title>繪制弧線</title>   
  6.     <style>   
  7.         body { background: url("./images/bg3.jpg") repeat; }  
  8.         #canvas { border: 1px solid #aaaaaa; display: block; margin: 50px auto; }   
  9.     </style>   
  10. </head>   
  11. <body>   
  12. <div id="canvas-warp">   
  13.     <canvas id="canvas">   
  14.         你的瀏覽器居然不支持Canvas?!趕快換一個(gè)吧!!   
  15.     </canvas>   
  16. </div>   
  17.   
  18. <script>   
  19.     window.onload = function(){   
  20.         var canvas = document.getElementById("canvas");   
  21.         canvas.width = 800;   
  22.         canvas.height = 600;   
  23.         var context = canvas.getContext("2d");   
  24.         context.fillStyle = "#FFF";   
  25.         context.fillRect(0,0,800,600);   
  26.   
  27.         drawArcTo(context, 200, 200, 600, 200, 600, 400, 100);   
  28.     };   
  29.   
  30.     function drawArcTo(cxt, x0, y0, x1, y1, x2, y2, r){   
  31.         cxt.beginPath();   
  32.         cxt.moveTo(x0, y0);   
  33.         cxt.arcTo(x1, y1, x2, y2, r);   
  34.   
  35.         cxt.lineWidth = 6;   
  36.         cxt.strokeStyle = "red";   
  37.         cxt.stroke();   
  38.   
  39.         cxt.beginPath();   
  40.         cxt.moveTo(x0, y0);   
  41.         cxt.lineTo(x1, y1);   
  42.         cxt.lineTo(x2, y2);   
  43.   
  44.         cxt.lineWidth = 1;   
  45.         cxt.strokeStyle = "#0088AA";   
  46.         cxt.stroke();   
  47.   
  48.     }   
  49. </script>   
  50. </body>   
  51. </html>  

運(yùn)行結(jié)果:

這個(gè)案例也很好說(shuō)明了arcTo()的各個(gè)關(guān)鍵點(diǎn)的作用。為了更清楚的解釋,我再標(biāo)注一個(gè)分析圖。

這里注意一下,arcTo()繪制的起點(diǎn)是(x0, y0),但(x0, y0)不一定是圓弧的切點(diǎn)。真正的arcTo()函數(shù)只傳入(x1, y1)和(x2, y2)。其中(x1, y1)稱為控制點(diǎn),(x2, y2)是圓弧終點(diǎn)的切點(diǎn),它不一定在圓弧上。但(x0, y0)一定在圓弧上。
有一點(diǎn)點(diǎn)繞,下面我們改變drawArcTo()函數(shù)的參數(shù)來(lái)試驗(yàn)一下。
(x2, y2)不一定在弧線上:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. drawArcTo(context, 200, 100, 600, 100, 600, 400, 400);  

(x0, y0)一定在弧線上:

JavaScript Code復(fù)制內(nèi)容到剪貼板
  1. drawArcTo(context, 400, 100, 600, 100, 600, 400, 400);  

挺有意思的,它為了經(jīng)過(guò)(x0, y0)直接將切點(diǎn)和(x0, y0)連接起來(lái)形成線段。好執(zhí)著的弧線……

標(biāo)簽:安慶 煙臺(tái) 邯鄲 撫州 玉溪 牡丹江 晉中 內(nèi)蒙古

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