SVG繪制路徑

在SVG中导而,使用 path 標(biāo)簽來(lái)定義一個(gè)路徑忱叭。它是一個(gè)單標(biāo)簽隔崎,基本語(yǔ)法為:尖角號(hào) path,斜線尖角號(hào)韵丑。應(yīng)用路徑爵卒,我們可以繪制任意形狀的圖形。

path標(biāo)簽的重要屬性 d撵彻,用來(lái)定義繪制路徑的命令钓株,d 是 draw 的縮寫(xiě),就是繪制的意思陌僵。

繪制路徑的命令有很多轴合,先看兩個(gè)常用的命令:

M 命令,是 moveto 的縮寫(xiě)碗短,定義繪制圖形的起點(diǎn)坐標(biāo)受葛。例如 M 150 0 (大M,空格豪椿,150奔坟,空格,0)搭盾,也可以寫(xiě)成 M150 0 (大M, 150咳秉,空格,0) 鸯隅,表示路徑從屏幕坐標(biāo)的 x 150澜建,y 0 (直接讀) 這個(gè)點(diǎn)開(kāi)始繪制。

L 命令蝌以,是 lineto 的縮寫(xiě)炕舵,用來(lái)繪制一條直線。例如 l 75 200 (讀小l跟畅,空格咽筋,75,空格徊件,200) 奸攻,也可以寫(xiě)成 l75 200 (讀作小l,75虱痕,空格睹耐,200),表示從上一個(gè)結(jié)束點(diǎn)到 x 75部翘,y 200 (直接讀) 這個(gè)點(diǎn)繪制一條直線硝训。

注意:命令的字母大小寫(xiě),表示的意義是不同的。大寫(xiě)字母表示絕對(duì)定位窖梁,小寫(xiě)字母表示相對(duì)定位赘风。絕對(duì)定位是相對(duì)于屏幕坐標(biāo)原點(diǎn)的位置,相對(duì)定位是相對(duì)于上一個(gè)繪制點(diǎn)的位置窄绒。

打開(kāi)編輯器贝次,新建一個(gè) path.html 文件,補(bǔ)全基礎(chǔ)代碼彰导,在 body 里添加一個(gè) svg 標(biāo)簽蛔翅,定義屬性 width 等于 400,height 等于 210位谋。

在 svg 里添加 path 標(biāo)簽山析,定義屬性 d,它的值定義為 "M150 0 L75 200 L225 200"掏父。保存文件笋轨。

在瀏覽器中預(yù)覽,一個(gè)具有默認(rèn)黑色的三角形就繪制好了赊淑。

這里你可能會(huì)問(wèn):用 polygon 繪制多邊形不也可以嗎爵政,為什么用 path 呢?其實(shí)陶缺,path 的繪制能力非常強(qiáng)钾挟,比如繪制一條貝塞爾曲線。

“貝賽爾曲線”是由法國(guó)數(shù)學(xué)家皮埃爾·貝塞爾(Pierre Bézier)發(fā)明的饱岸,由此為計(jì)算機(jī)矢量圖形學(xué)奠定了基礎(chǔ)掺出。

在 path 中,繪制“貝賽爾曲線” 使用 Q 命令苫费。

Q 是 quadratic Bézier curve ([k??rv]) 的縮寫(xiě)汤锨,用來(lái)繪制二次貝塞爾曲線,需要定義控制點(diǎn)和終點(diǎn)的坐標(biāo)百框。例如 q 150 -300 300 0闲礼,表示控制點(diǎn)坐標(biāo)是 x 150,y -300铐维,終點(diǎn)坐標(biāo)是 x 300柬泽,y 0。這個(gè)比較難理解方椎,大家來(lái)看一下二次貝塞爾曲線繪制示意圖聂抢。

回到編輯器钧嘶,為了強(qiáng)化練習(xí)棠众,我們來(lái)繪制一張二次貝塞爾曲線模擬靜態(tài)圖。(此時(shí)會(huì)展示繪制完以后的效果圖)

A為起點(diǎn),B為控制點(diǎn)闸拿,C為終點(diǎn)空盼。在AB,BC 兩條紅色的線段上新荤,有一條綠色的切線揽趾,藍(lán)色的為繪制的貝塞爾曲線。

我們先來(lái)繪制三個(gè)點(diǎn)苛骨。在上個(gè) svg 結(jié)尾處添加一個(gè) br 標(biāo)簽篱瞎。回車(chē)換行痒芝。

添加一個(gè)新的 svg 標(biāo)簽俐筋,屬性 width 等于 450,height 等于 400严衬。

我首先繪制三個(gè)點(diǎn)澄者。在 svg 標(biāo)簽里添加一個(gè) circle 標(biāo)簽,定義屬性 cx 等于 100请琳,cy 等于 350粱挡,r 等于 3。

復(fù)制兩個(gè) circle俄精,分別改寫(xiě)一下圓心的位置坐標(biāo)询筏。

這里我們能成組的給三個(gè)小圓定義顏色等屬性嗎?可以的嘀倒。

在SVG中屈留,我們可以使用 g 標(biāo)簽把多個(gè)繪圖元素包裹起來(lái),在 g 標(biāo)簽上定義公共的屬性测蘑。

我們給三個(gè)小圓定義一個(gè)父標(biāo)簽 g灌危,定義屬性 fill,值為 black碳胳。保存勇蝙。

回到瀏覽器,刷新挨约,三個(gè)小圓點(diǎn)做好了味混。

接下來(lái)繪制三個(gè)點(diǎn)的名稱(chēng)。

回到編輯器诫惭,再創(chuàng)建一個(gè) g 標(biāo)簽翁锡,在 g 標(biāo)簽里添加一個(gè) text 標(biāo)簽,填入文本大寫(xiě)字幕 A夕土。給 text 定義屬性 x 等于 100馆衔,y 等于 350瘟判,dx 等于 -30。

復(fù)制兩份 text 標(biāo)簽角溃,修改文本內(nèi)容分別為 B拷获,和 C。再修改一下屬性减细。

最后給 g 定義三個(gè)文本的公共屬性匆瓜,font-size 等于 30,fill 等于 black未蝌,text-anchor 等于 middle驮吱。保存。

回到瀏覽器萧吠,刷新糠馆,三個(gè)點(diǎn)的名稱(chēng)定義好了。

接下來(lái)繪制AB怎憋,BC兩條線段又碌。

回到編輯器,在 svg 里的首行創(chuàng)建一個(gè) path 標(biāo)簽绊袋,定義 d 屬性毕匀,值為 "M 100 350 l 150 -300" (直接讀,注意那個(gè)小 l ) 癌别,定義 stroke 屬性皂岔,值為 red,定義 stroke-width 屬性展姐,值為 3躁垛,fill 屬性,值為 none圾笨。

復(fù)制一個(gè) path教馆,修改一下 d 屬性的值。保存擂达。

回到瀏覽器土铺,刷新,兩條紅色的線段繪制好了板鬓。

接下來(lái)繪制綠色的切線悲敷。

回到編輯器,創(chuàng)建第三個(gè) path 標(biāo)簽俭令,定義 d 屬性后德,值為 "M 175 200 l 150 0" (直接讀,注意那個(gè)小 l ) 抄腔,定義 stroke 屬性瓢湃,值為 green窟赏,定義 stroke-width 屬性,值為 3箱季,fill 屬性,值為 none棍掐。保存藏雏。

回到瀏覽器,刷新作煌,一條綠色的切線繪制好了掘殴。

最后繪制主角兒,貝塞爾曲線粟誓。

回到編輯器奏寨,創(chuàng)建第四個(gè) path 標(biāo)簽,定義 d 屬性鹰服,值為 "M 100 350 q 150 -300 300 0" (直接讀病瞳,注意大M,小 q ) 悲酷,定義 stroke 屬性套菜,值為 blue,定義 stroke-width 屬性设易,值為 5逗柴,fill 屬性,值為 none顿肺。保存戏溺。

回到瀏覽器,刷新屠尊,完整的二次貝塞爾曲線模擬圖就繪制好了旷祸。

返回編輯器,我們可以把輔助的點(diǎn)和線都去掉讼昆,保存肋僧。

回到瀏覽器,刷新控淡,只顯示了第四條 path 路徑嫌吠,貝塞爾曲線!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末掺炭,一起剝皮案震驚了整個(gè)濱河市辫诅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涧狮,老刑警劉巖炕矮,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件么夫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡肤视,警方通過(guò)查閱死者的電腦和手機(jī)档痪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)邢滑,“玉大人腐螟,你說(shuō)我怎么就攤上這事±Ш螅” “怎么了乐纸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)摇予。 經(jīng)常有香客問(wèn)我汽绢,道長(zhǎng),這世上最難降的妖魔是什么侧戴? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任宁昭,我火速辦了婚禮,結(jié)果婚禮上酗宋,老公的妹妹穿的比我還像新娘久窟。我一直安慰自己,他們只是感情好本缠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布斥扛。 她就那樣靜靜地躺著,像睡著了一般丹锹。 火紅的嫁衣襯著肌膚如雪稀颁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天楣黍,我揣著相機(jī)與錄音匾灶,去河邊找鬼。 笑死租漂,一個(gè)胖子當(dāng)著我的面吹牛阶女,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哩治,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼秃踩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了业筏?” 一聲冷哼從身側(cè)響起憔杨,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒜胖,沒(méi)想到半個(gè)月后消别,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抛蚤,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年寻狂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岁经。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蛇券,死狀恐怖缀壤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情怀读,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布骑脱,位于F島的核電站菜枷,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叁丧。R本人自食惡果不足惜啤誊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拥娄。 院中可真熱鬧蚊锹,春花似錦、人聲如沸稚瘾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)摊欠。三九已至丢烘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間些椒,已是汗流浹背播瞳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留免糕,地道東北人赢乓。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像石窑,于是被迫代替她去往敵國(guó)和親牌芋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容