校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > html5 Canvas畫圖教程(4)—未閉合的路徑及漸變色的填充方法

html5 Canvas畫圖教程(4)—未閉合的路徑及漸變色的填充方法

熱門標(biāo)簽:洛陽(yáng)市伊川縣地圖標(biāo)注中心官網(wǎng) 地圖標(biāo)注自己去過的地方 會(huì)聲會(huì)影怎樣做地圖標(biāo)注效果 搜狗星級(jí)酒店地圖標(biāo)注 江蘇高頻外呼系統(tǒng)線路 平頂山電子地圖標(biāo)注怎么修改 標(biāo)準(zhǔn)智能外呼系統(tǒng) 高德地圖標(biāo)注錯(cuò)誤怎么修改 電銷機(jī)器人視頻
一般繪圖的方式有兩種,即填充和描邊,前面的文章已經(jīng)講了描邊的方法stroke,本文就講一下Canvas中填充圖形的方法。
填充即fill(),很直白吧?而且和strokeStyle表示描邊樣式一樣,fillStyle即表示填充樣式。
ctx.fillStyle = '顏色';默認(rèn)的填充樣式是不透明的黑色

提問:未閉合的路徑可以填充嗎?
可以。Canvas會(huì)從你當(dāng)前路徑的終點(diǎn)直接連接到起點(diǎn),然后填充。如圖:


但你可以發(fā)現(xiàn),最后一段沒有描邊。
記得我們前一篇文章用4條線畫了一個(gè)正方形,但canvas不會(huì)這么差勁,連直接繪制矩形的函數(shù)都沒有。你可以使用fillRect()直接填充一個(gè)矩形:

復(fù)制代碼
代碼如下:

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

這里的x,y是指矩形的左上角起點(diǎn)的坐標(biāo),記住。
說(shuō)到fillRect,就不得不提strokeRect,你猜對(duì)了,他的意思就是直接描邊出一個(gè)矩形。
還有fillText與strokeText,至于作用嘛,你可能都猜到了,我這里先不講,大家先預(yù)習(xí)吧。

Canvas填充漸變色
在Canvas中,漸變色同樣分為兩種,即線性漸變和徑向漸變,而且創(chuàng)建他們的方法也是獨(dú)立的。我們先看如何創(chuàng)建線性漸變。
創(chuàng)建線性漸變=createLinearGradient——看,依然很直接的單詞。他的語(yǔ)法如下:
createLinearGradient(x1,y1,x2,y2)有4個(gè)參數(shù)呢!看起來(lái)好復(fù)雜,其實(shí)這個(gè)挺簡(jiǎn)單的,因?yàn)槲覀兦懊嬉呀?jīng)說(shuō)了,平面世界里的一個(gè)點(diǎn)是由x坐標(biāo)和y坐標(biāo)確定的。所以,x1,y1就是表示線性漸變的起點(diǎn)坐標(biāo),x2,y2就表示終點(diǎn)坐標(biāo)。
這樣做的好處很明顯,如果我們想創(chuàng)建一個(gè)斜著的線性漸變,很方便。但我們先創(chuàng)建一個(gè)水平的線性漸變?cè)囋嚢伞?
var linear = ctx.createLinearGradient(100,100,200,100);漸變好像創(chuàng)建了,那么我們可以填充了嗎?————這個(gè)漸變是空的,沒有顏色。
往漸變條里加顏色的方法是addColorStop(位置,顏色).但要注意了,這個(gè)addColorStop不是加在畫筆上,而是加在前面的那個(gè)保存漸變的變量上,我這里是linear.

復(fù)制代碼
代碼如下:

var linear = ctx.createLinearGradient(100,100,200,100);
linear.addColorStop(0,'#fff');
linear.addColorStop(0.5,'#f0f');
linear.addColorStop(1,'#333');

我這里用了3個(gè)addColorStop,即為漸變條加上了3個(gè)顏色。
注意:addColorStop的位置參數(shù),永遠(yuǎn)是介于0-1之間的數(shù)字,可以是兩位小數(shù),表示百分比。他沒法接收’3px’這樣的參數(shù)。
這時(shí)候,我們就可以填充漸變色了,但我們必須先把定義好的漸變賦給fillStyle.

復(fù)制代碼
代碼如下:

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


注意,fillRect與strokeRect畫出的都是獨(dú)立的路徑,如上面的代碼,在fillRect后調(diào)用描邊,并不會(huì)把剛剛畫出的矩形描邊,strokeRect同理。
經(jīng)過測(cè)試后,發(fā)現(xiàn)了一個(gè)很蛋疼的問題,就是線性漸變的坐標(biāo)是相對(duì)于整個(gè)Canvas范圍而言的。比如我這里,我的線性漸變起點(diǎn)就是100,100,如果我畫了一個(gè)矩形在0,0的位置,用這個(gè)漸變來(lái)填充,就會(huì)發(fā)現(xiàn)沒有填充——因?yàn)槲业臐u變的范圍根本就超過了矩形的范圍。
這真是一個(gè)坑爹的設(shè)定。

提問:漸變起點(diǎn)之前與漸變終點(diǎn)之后還會(huì)填充顏色嗎?
會(huì)。起點(diǎn)之前的顏色就是起點(diǎn)色,終點(diǎn)之后的顏色一直是終點(diǎn)色。
如何終止終點(diǎn)色,你可以在結(jié)束色之后再填一個(gè)透明的結(jié)束色。如:

復(fù)制代碼
代碼如下:

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

依照前面的計(jì)劃,我再建一個(gè)傾斜的線性漸變?cè)囋嚒V恍枰腸reateLinearGradient的參數(shù)即可.

復(fù)制代碼
代碼如下:

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

效果如圖:

然后,讓我們來(lái)試試徑向漸變(圓形漸變)。與createLinearGradient類似,創(chuàng)建徑向漸變的方法是:createRadialGradient,但他們的參數(shù)可大不相同:
createRadialGradient(x1,y1,r1,x2,y2,r2)其中的x1,y1,x2,y2依舊表示起點(diǎn)和終點(diǎn),不過這里的起點(diǎn)和終點(diǎn)都是一個(gè)圓,而x,y則是圓心的坐標(biāo)。所以,r1與r2分別是起點(diǎn)圓的半徑和終點(diǎn)圓的半徑。如圖:


在我的印象中,貌似徑向漸變就是一個(gè)圓,圓心就是起點(diǎn),圓的半徑就是終點(diǎn)。但canvas里面的徑向漸變竟然搞的不一樣了,起點(diǎn)一個(gè)圓,終點(diǎn)一個(gè)圓,和我的理解有差距。
我們從最簡(jiǎn)單的做起。首先,做一個(gè)很正規(guī)的徑向漸變,即漸變圓形的圓心就是漸變的起點(diǎn)。由于正規(guī)的徑向漸變,中心即圓心,所以我們應(yīng)該盡量避免發(fā)生偏斜。那么,我們把終點(diǎn)圓的圓心與起點(diǎn)圓的圓心重合吧?

復(fù)制代碼
代碼如下:

var radial = ctx.createRadialGradient(55,55,10,55,55,55); //重合的圓心坐標(biāo)
radial.addColorStop(0,'#fff');
radial.addColorStop(0.5,'#ff0');
radial.addColorStop(0.9,'#555');
radial.addColorStop(1,'#f00');


這里我設(shè)置的徑向漸變起點(diǎn)圓和終點(diǎn)圓的圓心坐標(biāo)相同,而起點(diǎn)圓半徑為10,終點(diǎn)圓半徑為55.最后畫出的徑向漸變范圍是一個(gè)寬高110的圓形,說(shuō)明漸變范圍以終點(diǎn)圓的范圍為準(zhǔn)。
(可以看到終點(diǎn)圓范圍之外還是有顏色,這個(gè)顏色就是終點(diǎn)色,但是,如果你企圖使用radial.addColorStop(1.5,’#0f0′);這樣來(lái)定義漸變范圍之外的顏色,你還是會(huì)收到一個(gè)錯(cuò)誤).
那么,起點(diǎn)圓的半徑有什么用呢?——本來(lái)正常的徑向漸變的中心(姑且稱之為“變心”…吧)只是一個(gè)點(diǎn),不應(yīng)該是一個(gè)圓的。其實(shí)我們沒錯(cuò),這個(gè)起點(diǎn)圓就相當(dāng)于一個(gè)圓點(diǎn)而已,只是可能比較大。
讓我們把起點(diǎn)圓的半徑變得很大,接近于終點(diǎn)圓的半徑:

復(fù)制代碼
代碼如下:

var radial = ctx.createRadialGradient(55,55,50,55,55,55); //很接近

其他的colorStop都不變,然后圖形就變成了這個(gè)樣子。


也就是說(shuō),canvas中徑向漸變的起點(diǎn)色,是從起點(diǎn)圓的范圍之外繪制的,而起點(diǎn)圓的整個(gè)顏色都是起點(diǎn)色。
我們把起點(diǎn)圓的半徑設(shè)為0,那徑向漸變的“變心”,就真的是一個(gè)點(diǎn)了。
大部分時(shí)候我們都不需要很正規(guī)的徑向漸變,反而希望他的變心是偏移的,類似下圖:

這個(gè)時(shí)候,canvas徑向漸變兩個(gè)圓的優(yōu)勢(shì)就出來(lái)了,只要我們起點(diǎn)圓與終點(diǎn)圓的圓心不重合,那變心也就會(huì)偏移:
var radial = ctx.createRadialGradient(75,75,0,55,55,55);但此時(shí)的漸變范圍依然是終點(diǎn)圓的范圍哈。
很多人天生就有一種搞破壞的心理,比如這里,終點(diǎn)圓的半徑總比起點(diǎn)圓大,但如果把他們反過來(lái)會(huì)怎么樣呢?

復(fù)制代碼
代碼如下:

var radial = ctx.createRadialGradient(75,75,55,55,55,0);

經(jīng)測(cè)試,這樣不會(huì)報(bào)錯(cuò),只是原來(lái)的從內(nèi)到外的漸變反過來(lái)變成了從外到內(nèi)的漸變了。這是個(gè)好用法。


還有個(gè)問題,如果我們把起點(diǎn)圓的圓心偏移了,并且起點(diǎn)圓的范圍超出了終點(diǎn)圓的范圍,

這時(shí)會(huì)發(fā)生什么?


啊!?這是什么情況?!
當(dāng)起點(diǎn)圓和終點(diǎn)圓只有部分重疊的時(shí)候,就會(huì)出現(xiàn)這種情況。所以,如果你需要正常的徑向漸變,請(qǐng)保證其中一個(gè)圓完全包住了另一個(gè)圓。
另外,既然漸變可以賦給fillStyle,那么也可以賦給strokeStyle。效果你懂的。

標(biāo)簽:廣西 廣東 鄂爾多斯 常德 果洛 蚌埠 阿克蘇 松原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《html5 Canvas畫圖教程(4)—未閉合的路徑及漸變色的填充方法》,本文關(guān)鍵詞  html5,Canvas,畫圖,教程,未,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《html5 Canvas畫圖教程(4)—未閉合的路徑及漸變色的填充方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于html5 Canvas畫圖教程(4)—未閉合的路徑及漸變色的填充方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    国产成人精品1024| 欧美色倩网站大全免费| 色婷婷精品久久二区二区蜜臀av| 精品视频一区二区不卡| 国产欧美日本一区二区三区| 五月婷婷综合网| 不卡一区二区在线| 日韩久久久精品| 亚洲成a人片在线观看中文| 高清不卡在线观看| 欧美精品一区二区在线观看| 亚洲h动漫在线| 91丨porny丨国产入口| 国产偷v国产偷v亚洲高清| 欧美a级一区二区| 欧美系列亚洲系列| 国产精品蜜臀在线观看| 加勒比av一区二区| 日韩免费观看高清完整版 | 精品欧美一区二区久久| 亚洲精品国产视频| av中文一区二区三区| 国产色综合久久| 久久国产人妖系列| 91精品国产综合久久久久 | 国产日产精品一区| 黄网站免费久久| 日韩欧美激情在线| 国内成人精品2018免费看| 日韩三级伦理片妻子的秘密按摩| 亚洲另类中文字| 欧美伊人久久久久久久久影院 | 欧美一区二视频| 视频一区二区中文字幕| 欧美色大人视频| 亚洲国产精品一区二区久久恐怖片 | 亚洲精品乱码久久久久久日本蜜臀| av在线综合网| 成人欧美一区二区三区在线播放| 波多野结衣在线一区| 国产精品久久久一区麻豆最新章节| 国产99精品视频| 亚洲日本在线看| 欧美少妇bbb| 婷婷开心激情综合| 精品少妇一区二区三区视频免付费 | 中文字幕一区二区三区在线播放| 成a人片亚洲日本久久| 亚洲欧洲精品一区二区三区 | 欧美综合欧美视频| 亚洲第一电影网| 91麻豆精品国产91久久久更新时间| 蜜臀国产一区二区三区在线播放| 欧美一区二区免费| 国产成人欧美日韩在线电影| 国产精品久久久久9999吃药| 日本久久一区二区三区| 日韩国产精品久久| 久久精品无码一区二区三区| av高清不卡在线| 午夜免费欧美电影| 久久综合九色综合欧美98| 成人av小说网| 偷拍一区二区三区四区| 2024国产精品| 一本久久a久久精品亚洲| 蜜臀av性久久久久av蜜臀妖精 | 亚洲欧美另类久久久精品2019| 欧美婷婷六月丁香综合色| 裸体歌舞表演一区二区| 亚洲视频香蕉人妖| 日韩一级片在线观看| 不卡的av网站| 久久精品av麻豆的观看方式| 亚洲天堂福利av| 欧美变态tickle挠乳网站| 91亚洲精品久久久蜜桃| 国产尤物一区二区| 一区二区三区在线观看网站| 26uuu精品一区二区| 欧美中文一区二区三区| 国产成人av电影在线播放| 午夜久久福利影院| 国产精品国模大尺度视频| 日韩欧美国产高清| 欧美日韩一区二区三区不卡| 国产经典欧美精品| 日韩精品1区2区3区| 亚洲色图在线播放| 久久久不卡网国产精品二区| 在线不卡中文字幕播放| 91在线视频观看| 国产成人一区在线| 秋霞午夜av一区二区三区| 一区二区三区四区蜜桃| 国产精品青草久久| 精品福利一二区| 欧美一区二区在线视频| 欧美日韩一二区| 91黄视频在线| 91在线视频免费91| 成人免费视频视频在线观看免费| 久久精品国产99国产| 亚洲va欧美va人人爽| 一区二区三区四区乱视频| 成人免费在线观看入口| 欧美国产成人精品| 久久精品一区蜜桃臀影院| 欧美精品一区二区在线播放| 日韩欧美久久一区| 欧美一级黄色大片| 6080亚洲精品一区二区| 欧美日韩精品一二三区| 欧美日韩国产小视频| 欧美亚洲高清一区二区三区不卡| 色婷婷国产精品久久包臀 | 国产精品久久777777| 中文字幕第一区综合| 国产精品视频一二三区| 欧美激情中文不卡| 国产精品久久久久影院亚瑟| 国产欧美日本一区二区三区| 亚洲国产成人私人影院tom| 国产欧美日韩精品一区| 国产精品久久久久精k8 | 色婷婷精品久久二区二区蜜臀av | 亚洲视频一区二区免费在线观看| 国产精品久久久久7777按摩| 亚洲精品视频一区| 午夜精品一区二区三区三上悠亚| 日韩精彩视频在线观看| 国产一区欧美日韩| 国产原创一区二区三区| 成人黄色av电影| 欧洲生活片亚洲生活在线观看| 欧美色综合天天久久综合精品| 5858s免费视频成人| 亚洲精品一区二区在线观看| 久久精品在这里| 亚洲欧美偷拍另类a∨色屁股| 亚洲一区在线视频观看| 青青国产91久久久久久| 国产精品一区二区久激情瑜伽| 成人黄色一级视频| 欧美日韩精品电影| 欧美精品一区二区久久久| 欧美国产国产综合| 亚洲www啪成人一区二区麻豆| 麻豆国产一区二区| av中文一区二区三区| 欧美日韩一区二区三区在线| 久久你懂得1024| 亚洲综合色丁香婷婷六月图片| 日韩精品欧美精品| av中文字幕一区| 欧美一区二区三级| 国产精品乱人伦| 日韩电影在线观看电影| 国产91精品一区二区麻豆亚洲| 欧美在线免费视屏| 中文字幕高清一区| 日本美女一区二区三区视频| 成人av影院在线| 日韩色在线观看| 一区二区三区精品| 国产精品白丝jk黑袜喷水| 欧美日韩一区二区在线视频| 欧美激情中文不卡| 美女一区二区视频| 91麻豆精品在线观看| 久久影视一区二区| 偷拍日韩校园综合在线| 色中色一区二区| 久久久久久久网| 午夜久久电影网| 91福利视频久久久久| 国产精品污污网站在线观看 | 日韩欧美在线123| 亚洲精品一卡二卡| 成人一区二区视频| 日韩欧美黄色影院| 日本欧美一区二区三区| 在线观看日韩电影| 亚洲欧洲日本在线| 国产成人精品1024| 国产亚洲视频系列| 精品一区二区av| 91精品在线观看入口| 亚洲国产精品自拍| 欧美午夜在线观看| 亚洲一区免费视频| 色综合中文字幕| 国产精品国产三级国产有无不卡 | 免费精品99久久国产综合精品| 欧洲亚洲国产日韩| 亚洲午夜三级在线| 欧美性生交片4| 午夜在线成人av| 欧美调教femdomvk| 日韩精品免费专区|