搜尋
首頁web前端H5教程html5 Canvas畫圖教學(4)—未閉合的路徑及漸層色的填滿方式_html5教學技巧

一般繪圖的方式有兩種,即填充和描邊,前面的文章已經講了描邊的方法stroke,本文就講一下Canvas中填充圖形的方法。
填充即fill(),很直白吧?而且和strokeStyle表示描邊樣式一樣,fillStyle即表示填滿樣式。
ctx.fillStyle = '顏色';預設的填滿樣式是不透明的黑色

問題:未閉合的路徑可以填滿嗎?
可以。 Canvas會從你目前路徑的終點直接連接到起點,然後填滿。如圖:


但你可以發現,最後一段沒有描邊。
記得我們前一篇文章用4條線畫了一個正方形,但canvas不會這麼差勁,連直接繪製矩形的函數都沒有。你可以使用fillRect()直接填充一個矩形:

複製代碼
代碼如下:

ctx.fillRect(x,y,width,height);

這裡的x,y是指矩形的左上角起點的座標,記住。
說到fillRect,就不得不提strokeRect,你猜對了,他的意思就是直接描邊出一個矩形。
還有fillText與strokeText,至於作用嘛,你可能都猜到了,我這裡先不講,大家先預習吧。

Canvas填充漸層色
在Canvas中,漸層色同樣分為兩種,即線性漸變和徑向漸變,而且創建他們的方法也是獨立的。我們先看如何建立線性漸層。
建立線性漸變=createLinearGradient-看,依然很直接的單字。他的語法如下:
createLinearGradient(x1,y1,x2,y2)有4個參數呢!看起來好複雜,其實這個蠻簡單的,因為我們前面已經說了,平面世界裡的一個點是由x座標和y座標決定的。所以,x1,y1就是表示線性漸變的起點座標,x2,y2就表示終點座標。
這樣做的好處很明顯,如果我們想創建一個斜著的線性漸變,很方便。但我們先創建一個水平的線性漸層試試吧。
var linear = ctx.createLinearGradient(100,100,200,100);漸變好像創建了,那麼我們可以填充了嗎? ————這個漸層是空的,沒有顏色。
往漸層條裡加顏色的方法是addColorStop(位置,顏色).但要注意了,這個addColorStop不是加在畫筆上,而是加在前面的那個保存漸變的變數上,我這裡是linear.

複製程式碼
程式碼如下:

var linear = 代碼如下:


var linear = ctx.createLinearG.
linear.addColorStop(0,'#fff');
linear.addColorStop(0.5,'#f0f');
linear.addColorStop(1,'#333');
我這裡用了3個addColorStop,也就是為漸層條加上了3個顏色。

注意
:addColorStop的位置參數,永遠是介於0-1之間的數字,可以是兩位小數,表示百分比。他沒辦法接收’3px’這樣的參數。
這時候,我們就可以填充漸變色了,但我們必須先把定義好的漸變賦給fillStyle.
複製程式碼

程式碼如下:


var linear = ctx.createLinearGradient(100,100,200,100);
linear.addorStop(0,'#fff'); 0.5,'#f0f');
linear.addColorStop(1,'#333');
ctx.fillStyle = linear; //把漸層賦給填滿樣式
ctx.fillRect(100,100,100,1000);
ctx.stroke();


注意,fillRect與strokeRect畫出的都是獨立的路徑,如上面的程式碼,在fillRect後調用描邊,並不會把剛剛畫出的矩形描邊,strokeRect同理。
測試後,發現了一個很頭痛的問題,就是線性漸變的座標是相對於整個Canvas範圍而言的。像我這裡,我的線性漸變起點就是100,100,如果我畫了一個矩形在0,0的位置,用這個漸變來填充,就會發現沒有填充——因為我的漸變的範圍根本就超過了矩形的範圍。
這真是個坑爹的設定。

提問:漸層起點之前與漸變終點之後還會填滿顏色嗎?
會。起點之前的顏色就是起點色,終點之後的顏色一直是終點色。
如何終止終點色,你可以在結束色之後再填一個透明的結束色。如:

複製程式碼
程式碼如下:

linear.addColorStop. #333');
linear.addColorStop(1,'rgba(51,51,51,0)');

依照前面的計劃,我再建一個傾斜的線性漸變試試。只需要改createLinearGradient的參數即可.

複製代碼
代碼如下:

var linear = ctx.createLinearGradient(100,100,200,200);

效果如圖:

然後,讓我們來試試徑向漸層(圓形漸層)。與createLinearGradient類似,創建徑向漸變的方法是:createRadialGradient,但他們的參數可大不相同:
createRadialGradient(x1,y1,r1,x2,y2,r2)其中的x1,y1,x2,y2依舊表示起點和終點,不過這裡的起點和終點都是一個圓,而x,y則是圓心的座標。所以,r1與r2分別是起點圓的半徑和終點圓的半徑。如圖:


在我的印像中,看起來像徑向漸層就是一個圓,圓心就是起點,圓的半徑就是終點。但canvas裡面的徑向漸層竟然搞的不一樣了,起點一個圓,終點一個圓,和我的理解有差距。
我們從最簡單的做起。首先,要做一個很正規的徑向漸變,即漸變圓形的圓心就是漸變的起點。由於正規的徑向漸變,中心即圓心,所以我們應該盡量避免發生偏斜。那麼,我們把終點圓的圓心與起點圓的圓心重合吧?

複製程式碼
程式碼如下:
var radial = 程式碼如下:

var Radial = ctx.create,RadialG. 55,10,55,55,55); //重疊的圓心座標
radial.addColorStop(0,'#fff');
radial.addColorStop(0.5,'#ff0');
radial.addColorStop(0.9,'#555');
radial.addColorStop(1,'#f00');



這裡我設定的徑向漸變起點圓和終點圓的圓心座標相同,而起點圓半徑為10,終點圓半徑為55.最後畫出的徑向漸變範圍是一個寬高110的圓形,說明漸變範圍以終點圓的範圍為準。
(可以看到終點圓範圍之外還是有顏色,這個顏色就是終點色,但是,如果你企圖使用radial.addColorStop(1.5,'#0f0′);這樣來定義漸變範圍之外的顏色,你還是會收到一個錯誤).
那麼,起點圓的半徑有什麼用呢? ——原本正常的徑向漸變的中心(姑且稱之為「變心」…吧)只是一個點,不應該是一個圓的。其實我們沒錯,這個起點圓就相當於一個圓點而已,只是可能比較大。
讓我們把起點圓的半徑變得很大,接近終點圓的半徑:
複製程式碼
複製程式碼

程式碼如下: var radial = ctx.createRadialGradient(55,55,50,55,55,55); //很接近
其他的colorStop都不變,然後圖形變成了這個樣子。


也就是說,canvas中徑向漸層的起點色,是從起點圓的範圍之外繪製的,而起點圓的整個顏色都是起點色。
我們把起點圓的半徑設為0,那徑向漸變的“變心”,就真的是一個點了。
大部分時候我們都不需要很正規的徑向漸變,反而希望他的變心是偏移的,類似下圖:

這時候,canvas徑向漸層兩個圓的優勢就出來了,只要我們起點圓與終點圓的圓心不重合,那變心也就會偏移:
var radial = ctx.createRadialGradient(75,75, 0,55,55,55);但此時的漸變範圍仍是終點圓的範圍哈。
很多人天生就有一種搞破壞的心理,比如這裡,終點圓的半徑總比起點圓大,但如果把他們反過來會怎麼樣呢?

複製程式碼
程式碼如下:
var Radial = 代碼如下:

var Radial = ctx.create,mialG. 75,55,55,55,0);


經測試,這樣不會報錯,只是原來的從內到外的漸變反過來變成了從外到內的漸變了。這是個好用法。



還有個問題,如果我們把起點圓的圓心偏移了,並且起點圓的範圍超出了終點圓的範圍,

這時會發生什麼事?



啊! ?這是什麼情況? !
當起點圓和終點圓只有部分重疊的時候,就會出現這種情況。所以,如果你需要正常的徑向漸變,請確保其中一個圓完全包住了另一個圓。 另外,既然漸變可以賦給fillStyle,那麼也可以賦給strokeStyle。效果你懂的。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
掌握microdata:HTML5的分步指南掌握microdata:HTML5的分步指南May 14, 2025 am 12:07 AM

Microdatainhtml5enhancesseoanduserexperienceByByBybyBystructuredDatatoSearchEngines.1)useIteMscope,itemType,anditempropattributestomarkupcontentlikeSoreRoductSssSssSoRorevents.2)

HTML5表格中有什麼新功能?探索新輸入類型HTML5表格中有什麼新功能?探索新輸入類型May 13, 2025 pm 03:45 PM

html5introducesnewinputtypesthatenhanceSerexperience,簡化開發和iMproveAccessibility.1)自動validatesemailformat.2)優化優化,優化OmportizeSmizesemizesemizesemizesemizesemizeSmobobileWithAnumericKeyPad.3)和Simimplifydateandtimeputientupits,並重新替代了Forcustemolcustemolcustene。

理解H5:含義和意義理解H5:含義和意義May 11, 2025 am 12:19 AM

H5是HTML5,是HTML的第五個版本。 HTML5提升了網頁的表現力和交互性,引入了語義化標籤、多媒體支持、離線存儲和Canvas繪圖等新特性,推動了Web技術的發展。

H5:可訪問性和網絡標準合規性H5:可訪問性和網絡標準合規性May 10, 2025 am 12:21 AM

無障礙訪問和網絡標準遵循對網站至關重要。 1)無障礙訪問確保所有用戶都能平等訪問網站,2)網絡標準遵循提高網站的可訪問性和一致性,3)實現無障礙訪問需使用語義化HTML、鍵盤導航、顏色對比度和替代文本,4)遵循這些原則不僅是道德和法律要求,還能擴大用戶群體。

HTML中的H5標籤是什麼?HTML中的H5標籤是什麼?May 09, 2025 am 12:11 AM

HTML中的H5標籤是第五級標題,用於標記較小的標題或子標題。 1)H5標籤幫助細化內容層次,提升可讀性和SEO。 2)結合CSS可定製樣式,增強視覺效果。 3)合理使用H5標籤,避免濫用,確保內容結構邏輯性。

H5代碼:Web結構的初學者指南H5代碼:Web結構的初學者指南May 08, 2025 am 12:15 AM

HTML5構建網站的方法包括:1.使用語義化標籤定義網頁結構,如、、等;2.嵌入多媒體內容,使用和標籤;3.應用表單驗證和本地存儲等高級功能。通過這些步驟,你可以創建一個結構清晰、功能豐富的現代網頁。

H5代碼結構:組織內容以實現可讀性H5代碼結構:組織內容以實現可讀性May 07, 2025 am 12:06 AM

通過合理的H5代碼結構可以讓頁面在眾多內容中脫穎而出。 1)使用語義化標籤如、、等組織內容,使結構清晰。 2)通過CSS佈局如Flexbox或Grid控制頁面在不同設備上的呈現效果。 3)實現響應式設計,確保頁面在不同屏幕尺寸上自適應。

H5與較舊的HTML版本:比較H5與較舊的HTML版本:比較May 06, 2025 am 12:09 AM

HTML5(H5)與舊版本HTML的主要區別包括:1)H5引入了語義化標籤,2)支持多媒體內容,3)提供離線存儲功能。 H5通過新標籤和API增強了網頁的功能和表現力,如和標籤,提高了用戶體驗和SEO效果,但需注意兼容性問題。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具