亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

小試SVG之新手小白入門教程

2019-11-19 12:18:36
字體:
來源:轉載
供稿:網(wǎng)友

基本概念

svg(Scalable Vector Graphics)是一種基于XML語法的圖像格式,全稱是可縮放矢量圖,其它圖像格式都是基于像素處理的,SVG則是屬于對圖像的形狀描述,所以它本質上是文本文件,體積較小,且不管放大多少倍都不會失真.SVG是面向圖形,HTML時面向文本。

嵌入到HTML

SVG可以寫在一個獨立的文件中,然后用img, object, embed, iframe等標簽插入網(wǎng)頁

<img src="circle.svg"><object id="object" data="circle.svg" type="image/svg+xml"></object><embed id="embed" src="icon.svg" type="image/svg+xml"><iframe id="iframe" src="icon.svg"></iframe>

SVG文件可以轉為base64編碼,然后作為Data URI寫入網(wǎng)頁

<img src="data:image/svg+xml;base64,[data]" />

SVG書寫的注意點

  • SVG的元素和屬性必須按照標準格式來寫,因為XML是確認大小寫的
  • SVG里的屬性值必須用引號引起來,就算是數(shù)值也必須這么做
  • SVG圖像的默認大小是300像素(寬)x 150像素(高)
  • 后面的元素會渲染在前面元素之上

SVG的所有元素

SVG的所有元素

SVG的所有屬性

SVG的所有屬性

常用的形狀元素

其實上圖只是對一些常用svg標簽的初步認識,因為svg所提供的標簽不止這些,而且比如path標簽是在svg中最為通用的形狀標簽,因為它可以通過設置路徑畫出其它圖形,比如矩形,圓,橢圓,多邊形,多線段,甚至是復雜的貝塞爾曲線等等

path

第一次看到svg的標簽的時候,打開控制臺,也是一臉懵逼,首先這里面的d屬性是個啥,M是啥,L是啥,Z是啥,H是啥,V是啥,C是啥,S是啥,Q是啥,T是啥,A是啥,我... 打擾了,打擾了

嗯,26個兄弟快湊齊了,馬上就可以召喚神龍了。當然,path這條神龍在svg界就是“爸爸”,啥玩意都能給你弄出來,

想要通過path勾勒出美妙的圖形,需要了解d這個屬性,path標簽中的d屬性可以定義一系列的指令和參數(shù),每一個指令通過一個字母來指定,比如上面說的M,它表示移動到,也就是"move to"的意思,比如讓我們移動到(10, 10)的坐標點,就可以這樣寫:

<rect d="M10 10" />'

當然每一種字母都是區(qū)分大小寫的,比如M是基于畫布上的一個絕對坐標,而m則是基于上一個點的坐標,也就是相對坐標。比如有下面兩種指令

<path d="M20,20 L40 40 M60 60 L80 80" fill="none" stroke="blue" stroke-width="5"/><path d="M20,20 L40 40 m60 60 L80 80" fill="none" stroke="blue" stroke-width="5"/>

兩個path唯一的區(qū)別就是第三個指令,一個是M60 60, 一個是m60 60

線段指令(Line commands)

  • L:L指令會拿到兩個參數(shù),x坐標和y坐標,然后從當前位置到指定參數(shù)坐標位置來繪制線段
  • H:H其實是horizontal的縮寫,意為繪制出水平方向的線段,因為方向已確定,所以只需一個參數(shù)就能完成線段的繪制
  • V:同H同理,只不過表示垂直方向(vertical)的線段繪制

比如用H和V來繪制一個矩形, 我們一步一步來

step1

<path d="M10 10 H 90" fill="none" stroke="blue"/>

step2

<path d="M10 10 H 90 V 90" fill="none" stroke="blue"/>

step3

<path d="M10 10 H 90 V 90 H 10" fill="none" stroke="blue"/>

step4

<path d="M10 10 H 90 V 90 H 10 V 10" fill="none" stroke="blue"/>

上面的寫法也可以通過一個指令來簡寫一下,這就用到了Z指令

Z:該指令的作用是從當前位置向起始點畫出一條線段,它一般都被放置在一連串節(jié)點的末尾,并且不區(qū)分大小寫??梢岳斫鉃椤遍]環(huán)“指令

所以上例可以寫成這樣,也能達到同樣的效果

<path d="M10 10 H 90 V 90 H 10 Z" fill="none" stroke="blue"/>

同樣,上例也可以通過相對定位的形式進行改寫,效果是一致的

<path d="M10 10 h 80 v 80 h -80 Z" fill="transparent" stroke="blue"/>

曲線指令(Curve commands)

一說到曲線,那貝塞爾曲線是繞不開的,對于曾高數(shù)掛科的我來說是很排斥的,但好在閑著蛋疼,遂學之。

path標簽中有兩類貝塞爾曲線,一種叫做“三次貝塞爾曲線(cubic curve)“, 一種叫做”二次貝塞爾曲線(quadratic curve)“,這名字聽起來就不接地氣。

那先從三次貝塞爾曲線說起

C:該指令用于創(chuàng)建一個三次貝塞爾曲線,需指定三組參數(shù)

比如:

<path d="M10 10 C 20 20, 40 20, 50 10" stroke="black" fill="transparent"/>

首先,(20 20)和(40 20)表示控制節(jié)點,一個是描述曲線起始點的斜率,另一個是描述曲線終止點的斜率,最后一組(50 10)表示曲線的終點。總結一下這段示例,就是有一條從(10 10)到(50 10)的一條線段,通過設置兩個控制點的斜率,使這條線段的各個點彎曲成正確的(符合斜率趨勢的)曲線。

MDN上有多組曲線的對比示例。

這里面我們再添加一種情況,就是設置兩個水平的控制節(jié)點,來看看線段是如何變化的

<path d="M10 10 C 10 10, 40 10, 50 10" stroke="black" fill="transparent"/>

通過S指令能生成和上述示例中同樣的平滑曲線,使用S指令分為以下兩種情況

  • S指令跟在C或者另一個S指令之后:那S指令的開始控制節(jié)點就是基于前一個控制節(jié)點的對稱點,并且S指令指定的第一組節(jié)點是結束控制節(jié)點
  • 單獨的S指令:兩個控制節(jié)點會被設置為同一個點

比如如下代碼

 <svg  xmlns="http://www.w3.org/2000/svg"  width="190"  height="160" >  <path d="M10 80 C 40 10, 65 10, 95 80 S 150 150, 180 80" stroke="black" fill="transparent"/>  <circle cx="10" cy="80" r="2" fill="red"/>  <circle cx="95" cy="80" r="2" fill="red"/>  <circle cx="180" cy="80" r="2" fill="red"/>  <circle cx="150" cy="150" r="2" fill="red"/> </svg>

我們通過不斷改變S的第一組節(jié)點來看圖形的變化趨勢

我們可以看到,隨著不斷給S指令結束控制節(jié)點的橫坐標累加,曲線會向右偏移。

接下來看下S指令前面沒有其他C或者S指令的情況,代碼如下

<svgxmlns="http://www.w3.org/2000/svg"width="300"height="300"><path d="M10 80 S 95 150, 180 80" stroke="black" fill="transparent"/><circle cx="10" cy="80" r="2" fill="red"/><circle cx="95" cy="150" r="2" fill="red"/></svg>

另一種曲線是二次貝塞爾曲線(quadratic curve)

它通過指令Q來來進行描述,相較于三次貝塞爾曲線,它更為簡單。

Q:只需要指定兩組參數(shù),第一組表示控制節(jié)點的坐標,第二組表示終點坐標。

示例:

<svgxmlns="http://www.w3.org/2000/svg"width="300"height="300"><path d="M10 80 Q 95 10 180 80" stroke="black" fill="transparent"/><circle cx="10" cy="80" r="2" fill="red"/><circle cx="95" cy="20" r="2" fill="red"/><circle cx="180" cy="80" r="2" fill="red"/></svg>

和三次貝塞爾類似,二次貝塞爾也提供了快捷的玩法,那就是T指令

T:通過找到前一個控制節(jié)點,來推斷出一個新的控制點,T指令后面只需要指定一組結束點坐標即可,由于T指令是基于前一個控制點的基礎上來生成的,所以T指令之前必須要有Q指令或者其他T指令,否則生成的控制節(jié)點就和前一個控制節(jié)點就會重合,在畫布上看到的就僅僅是一條直線。

示例:

 <svg  xmlns="http://www.w3.org/2000/svg"  width="300"  height="300" >  <path d="M10 80 Q 52.5 10, 95 80 T 180 80" stroke="black" fill="transparent"/>  <circle cx="10" cy="80" r="2" fill="red"/>  <circle cx="52.5" cy="10" r="2" fill="red"/>  <circle cx="95" cy="80" r="2" fill="red"/>  <circle cx="180" cy="80" r="2" fill="red"/> </svg>

在上面幾個例子中,兩種曲線都生成了同樣的結果,雖然三次貝塞爾允許更多的自由度,但是決定使用哪種曲線還要依照具體情形以及對稱曲線的數(shù)量來定

弧度(Arcs)

在svg中也可以創(chuàng)建弧度這種曲線,它通過A指令來指定,A指令可以接收7個參數(shù)

  • rx:x軸半徑
  • ry:y軸半徑
  • x-axis-rotation:弧形的旋轉角度
  • large-arc-flag:決定弧線是大于180度好事小于180度,0表示小角度弧,1表示大角度弧
  • sweep-flag:表示弧線的方向,0表示從起點到終點沿逆時針畫弧,1表示從起點到終點沿順時針畫弧
  • x:弧形終點的橫坐標
  • y:弧形終點的縱坐標

示例:

 <?xml version="1.0" standalone="no"?> <svg width="325px" height="325px" version="1.1" xmlns="http://www.w3.org/2000/svg"> <path d="M80 80   A 45 45, 0, 0, 0, 125 125   L 125 80 Z" fill="green"/> <path d="M230 80   A 45 45, 0, 1, 0, 275 125   L 275 80 Z" fill="red"/> <path d="M80 230   A 45 45, 0, 0, 1, 125 275   L 125 230 Z" fill="purple"/> <path d="M230 230   A 45 45, 0, 1, 1, 275 275   L 275 230 Z" fill="blue"/> </svg>

餅圖

通過學習path,我們來繪制一個簡單的餅圖

 <svg width="325" height="325" xmlns="http://www.w3.org/2000/svg">  <path d="M80 80    A 45 45, 0, 0, 0, 125 125    L 125 80 Z" fill="green"/>  <path d="M170 80    A 45 45, 0, 0, 1, 125 125    L 125 80 Z" fill="red"/>  <path d="M170 80    A 45 45, 0, 0, 0, 125 35     L 125 80 Z" fill="blue" />  <path d="M80 80    A 45 45, 0, 0, 1, 125 35    L 125 80 Z" fill="pink"/> </svg>

小結

在最近的一些項目中,接觸到了部分有關svg的需求,所以這篇文章就是記錄下自己在學習svg的一部分總結,比較基礎,方便自己今后的復習和查閱。

參考資源

MDN SVG

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林網(wǎng)的支持。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲色图88| 精品黄色免费中文电影在线播放| 先锋av资源在线| 欧美激情国产日韩| 欧美xxxx做受欧美.88| 樱桃视频在线观看一区| 中文久久久久久| 欧美96一区二区免费视频| 激情成人四房播| 一个人免费视频www在线观看| 国产麻豆成人精品| 国内精品久久久久久久久久| 久久精品在线观看| 毛片av免费在线观看| 97香蕉碰碰人妻国产欧美| 五月天婷婷基地| 免费的黄网站在线观看| 男人添女人下部高潮视频在观看| 奇米888四色在线精品| 欧美一区二区三区免费视频| 黄页网站在线播放| 丝袜亚洲另类丝袜在线| 夜夜骚av一区二区三区| 精品亚洲一区二区三区在线播放| 精品黄色免费中文电影在线播放| 日本a级片在线观看| 精品国产a一区二区三区v免费| 成人小视频免费在线观看| caoporn91| 国产一区二区三区朝在线观看| 亚洲精品久久久蜜桃| 久久成人羞羞网站| 九九九九九精品| 五月天激情小说| 亚洲男人在线| 综合网五月天| 亚洲成人影院麻豆| 在线看无码的免费网站| 午夜日韩激情| 国产91一区二区三区| 亚洲无线观看| 999福利视频| 欧美偷拍一区二区| 免费视频网站在线观看入口| 欧美激情女人20p| 91精品国产麻豆国产在线观看| 这里视频有精品| 一区二区三区四区视频| 98精品在线视频| 秋霞综合在线视频| 精品亚洲一区二区三区四区五区高| 成人一二三四区| www.久色| 91九色偷拍| 免费97视频在线精品国自产拍| 欧美日本国产| 欧美日韩一区三区| 少妇高潮av久久久久久| 久久精品亚洲欧美日韩精品中文字幕| 99精品福利视频| 国产精品久久久久毛片大屁完整版| 久久伊人91精品综合网站| 美腿丝袜亚洲色图| 久久久99免费视频| 超碰在线97国产| 国产无套精品一区二区三区| 色呦呦在线资源| 亚洲国产精品狼友在线观看| 亚洲图片中文字幕| 亚洲欧美清纯在线制服| 色视频在线免费| 亚洲第一香蕉视频| 国产精品ⅴa在线观看h| 激情懂色av一区av二区av| 亚洲视频在线播放免费| 亚洲精品国产一区二| 国产黄色成人av| 波多野结衣之无限发射| av成人在线电影| 538精品在线视频| 性欧美一区二区| 国产精品玖玖玖在线资源| 亚洲国产成人爱av在线播放| 小说区视频区图片区| 91嫩草|国产丨精品入口| 精品人妻一区二区三区换脸明星| av在线免费看片| 欧美日韩和欧美的一区二区| 好男人www社区在线视频夜恋| 残酷重口调教一区二区| 国产又粗又猛又爽又黄视频| 亚洲最好看的视频| 精品国产一区二区三区不卡蜜臂| 久久99影院| 欧美xxxx黑人又粗又长| 欧美日韩专区| www日韩在线观看| 五月天电影免费在线观看一区| 在线三级电影| 男人天堂久久久| 精品福利在线| 91美女视频网站| 亚洲va久久久噜噜噜| 青青草99啪国产免费| 懂色av一区二区三区蜜臀| 亚洲国产精品天堂| 国产第一页浮力| 欧美99久久| 激情av综合网| 日韩a∨精品日韩在线观看| 日产国产高清一区二区三区| 欧美性高潮床叫视频| 精品国产免费第一区二区| 成人午夜免费福利| 91色琪琪电影亚洲精品久久| 国产av不卡一区二区| av图片在线观看| 欧美影院天天5g天天爽| 久久久久在线| 精品69视频一区二区三区| 国产精品露脸自拍| 国产精品探花一区二区在线观看| 最近2018年在线中文字幕高清| 亚洲同志男男gay1069网站| 色婷婷av国产精品| 激情都市一区二区| 国产一区二区视频播放| 99久热re在线精彩视频| 成人台湾亚洲精品一区二区| 亚洲国产高清自拍| 91超薄肉色丝袜交足高跟凉鞋| 亚洲视频综合网| 欧美精品videosex极品1| 欧美精品久久一区| 色婷婷av金发美女在线播放| 宅男在线一区| 精品精品国产高清一毛片一天堂| 亚洲伦理在线| 久久这里精品| 性感美女久久精品| 一区二区三区午夜探花| 天堂蜜桃91精品| 加勒比av在线播放| 国产成人免费av一区二区午夜| 人妻一区二区三区| 日本xxxx高清色视频| 日本一不卡视频| 丰满人妻一区二区三区四区| av在线免费在线观看| 国产二级片在线| 欧美精选一区二区三区| 国产免费一区二区三区四区| 亚洲天堂一区二区在线观看| 欧美最顶级a∨艳星| 国产福利在线导航| 国产三级在线看| 日韩精品在线免费视频| 91网站在线观看视频| 亚洲欧洲自拍| 日韩永久免费视频| 欧美第一区第二区| 欧美精品video| 九九热免费在线观看| 精品丰满少妇一区二区三区| 分分操这里只有精品| 激情视频在线播放| 秋霞在线观看一区二区三区| 日韩 中文字幕| 日韩在线欧美| 中国女人特级毛片| 91久久爱成人| 精品动漫一区| 国产在线视频福利| 亚洲妇熟xx妇色黄| av在线天堂| 欧美日韩国产区| 97精品视频在线看| 影音先锋欧美精品| 欧美无砖砖区免费| 99精品国产99久久久久久福利| 伊人中文字幕在线观看| 香蕉久久夜色精品国产更新时间| 欧美精品免费播放| 久久综合久久鬼色中文字| 欧美日韩一区中文字幕| 亚洲精品一区二区三区蜜桃久| 欧美日韩精品在线一区| 国产探花在线观看视频| 亚洲欧洲综合另类在线| 午夜探花在线观看| 日韩高清在线免费观看| 欧美成人福利在线观看| 欧美午夜精品一区二区三区| 亚洲精品成人电影| av中文字幕第一页| 欧美不卡在线视频| 成年无码av片在线| 日韩黄色影院| 爽好多水快深点欧美视频| 91尤物视频在线观看| 国产成人一二片| 日产亚洲一区二区三区| av资源吧首页| 免费一级特黄特色毛片久久看| 日韩欧美在线观看一区二区| 黄网站色大毛片| 91在线视频成人| 欧美日韩看看2015永久免费| 粉嫩av一区二区三区粉嫩| 国产伦精品一区二区三区照片91| 久久网站免费观看| free性丰满69性欧美| 亚洲精品久久久成人| 国产福利在线观看| 男女做爰猛烈刺激| 国产第一页在线视频| 日本久久一区二区三区| 一区二区在线观看视频在线| 91精品产国品一二三产区| 精品国产一二| 老司机午夜在线| 99riav在线| 欧美做爰性欧美大fennong| av2014天堂网| 国产精品不卡av| 国产高清亚洲一区| 污污网站免费看| 影音先锋日韩资源| 日韩精品久久久免费观看| 亚洲精品网站在线观看| 亚洲精品一区二区精华| 久久国产精品露脸对白| 伊人精品在线| 欧美日韩五区| 最新中文在线视频| 亚洲色图16p| www在线观看播放免费视频日本| 久久国产亚洲精品| 最新黄色网址在线观看| 丰满肉嫩西川结衣av| 国产精久久久久| 日韩欧美精品中文字幕| 亚洲综合日本| 91小视频在线播放| 日韩欧美精品电影| 嫩草香蕉在线91一二三区| 91好吊色国产欧美日韩在线| 免费中文字幕av| 中文字幕免费在线观看视频一区| 国产精品久久久久9999小说| 乡村艳史在线观看| 欧美zozo| 亚洲日本激情| 美女免费黄色| 香蕉大人久久国产成人av| 日韩国产在线一区| 久久久精品国产sm调教| 91精品人妻一区二区三区蜜桃欧美| 一级黄色大片免费观看| 日本色图欧美色图| 中文字幕中文字幕在线中心一区| 国内精品伊人久久久久影院对白| 国产一区二区不卡老阿姨| 免费在线观看av片| 黑人与亚洲人色ⅹvideos| 亚洲kkk444kkk在线观看| 成人黄色免费电影| 国产98在线| 在线免费激情视频| 九色porny自拍视频在线观看| 亚洲wwww| 中文一区一区三区免费在线观看| 成人影院天天5g天天爽无毒影院| 蜜桃一区av| 午夜天堂在线视频| 欧美成va人片在线观看| 在线a免费看| 国产精品第九页| 欧美 日韩 国产 一区二区三区| 欧美激情久久久久久久| 两个人看的在线视频www| 美女的诞生在线观看高清免费完整版中文| 成人性生交大片免费看午夜| 大片免费在线观看| 红杏视频成人| 亚洲视频免费播放| 亚洲free嫩bbb| heisi视频网在线观看| 亚洲xxxx2d动漫1| 九七伦理97伦理手机| 午夜精品久久久久久久爽| 亚洲欧洲国产精品一区| 欧美影院视频| 日韩电影中文字幕在线观看| 免费网站看黄yyy222| 98精品视频| 91视视频在线观看入口直接观看www| 一区二区三区在线视频免费观看| 综合分类小说区另类春色亚洲小说欧美| 丰满爆乳一区二区三区| 国产成人精品久久一区二区小说| 五月婷婷中文字幕| 九色视频九色自拍| 日韩电影中文字幕av| 久久精品国产精品亚洲毛片| 亚洲天堂aaa| 国产不卡一区二区三区在线观看| 成人国产电影在线观看| 性xxxxfreexxxxx欧美丶| 天天综合永久入口| 国产a√精品区二区三区四区| 蜜桃视频成人m3u8| 国产精品无码免费专区午夜| 亚洲国产精品二区| 9久久9毛片又大又硬又粗| 国产女同互慰高潮91漫画| 99精品一区二区三区的区别| 开心九九激情九九欧美日韩精美视频电影| 免费欧美一级片| 亚洲自拍偷拍一区二区| 免费在线一区二区三区| 亚洲毛片av在线| 日韩精品在线免费看| 亚洲欧美日韩国产中文专区| 色综合咪咪久久网| 欧美麻豆久久久久久中文| 久久精品国产视频| 久久久在线观看|