SVG手冊

使用方式

  • 瀏覽器直接打開
  • 在HTML中使用<img>標(biāo)簽引用
  • 直接在HTML中使用SVG標(biāo)簽
  • 作為CSS背景

基本圖形和屬性

  • 基本圖形
<rect>
<circle>
<ellipse>
<line>
<polyline>
<polygon>
  • 基本屬性
fill
stroke
stroke-width
transform

基本操作API

  • 創(chuàng)建圖形
document.createElementNS(ns, tagName)
  • 添加圖形
element.appendChild(childElement)
  • 設(shè)置/獲取屬性
element.setAttribute(name, value)
element.getAttribute(name)

SVG的世界限寞、視野铣耘、視窗

  • SVG代碼-定義世界[世界是無限大的渣慕,無窮無盡]
  • width,height-控制視窗[看世界的一扇窗戶]饵隙,瀏覽器開辟出來用于渲染SVG內(nèi)容的一個區(qū)域
  • viewBox,preserveAspectRatio-控制視野[我們能看到世界大小的一種能力]
    視野越廣闊冤寿,看到的內(nèi)容越豐富,單個物體的內(nèi)容越小慢逾,跟屏幕分辨率一個道理
    理想情況下歧强,視野和視窗有一樣的尺寸
    不一樣的情況,就需要填充策略preserveAspectRatio
<svg xmlns="..."
width="800" height="600"
viewBox="0 0 400 300"
preserveAspectRatio="xMidYMid meet">
<!--SVG Content-->
</svg>

SVG中的圖形分組

  • <g>標(biāo)簽來創(chuàng)建分組
  • 屬性繼承
  • transform屬性定義坐標(biāo)變換
  • 可以嵌套使用

線性變換

  • 線性變換方程
X' = aX + cY + e
Y' = bX + dY + f
  • 變換矩陣沙热,記為M
a c e
b d f
0 0 1

旋轉(zhuǎn)

使用極坐標(biāo)變換矩陣
極坐標(biāo)方程:

X = r?cos(α)
Y = r?sin(α)

旋轉(zhuǎn)θ度后

X' = r?cos(α+θ)
Y' = r?sin(α+θ)

矩陣:

cos(θ)  -sin(θ) 0
sin(θ)   cos(θ) 0
    0        0  1

展開后:

X' = r?cos(α)cos(θ)-r?sin(α)sin(θ)=X?cos(θ) - Y?sin(θ) + 0
Y' = r?sin(α)cos(θ)+r?cos(α)sin(θ)=X?sin(θ) + Y?cos(θ) + 0

線性變換列表

  • 表示一系列的變換叉钥,結(jié)果為變換的矩陣的乘積
  • 后面的變換乘在前面
M=Mn?Mn-1?...?M2?M1?M0
1 0 10      cos(30deg) -sin(30deg)  0
0 1 10  ?   sin(30deg)  cos(30deg)  0
0 0 1               0           0   1
Mtranslate?Mrotate

transform屬性

  • 前驅(qū)坐標(biāo)系:父容器坐標(biāo)系
  • transform屬性:定義前驅(qū)坐標(biāo)系到自身坐標(biāo)系的線性變換
  • 語法:
rotate(<deg>)
translate(<x>,<y>)
scale(<sx>,<sy>)
matrix(<a>,<b>,<c>,<d>,<e>,<f>)

在SVG中應(yīng)用顏色

<rect fill="rgb(255,0,0)" opacity="0.5" />
<rect stroke="hsla(0,50%,60%,0.5) />"

線性漸變

  • <linearGradient>和<stop>
  • 定義方向
  • 關(guān)鍵點位置及顏色
  • gradientUnits

徑向漸變

  • <radialGradient>和<stop>
  • 定義方向
  • 關(guān)鍵點位置及顏色
  • gradientUnits
  • 焦點位置

坐標(biāo)觀察

  • getBBox()
    獲得當(dāng)前元素所占的矩形區(qū)域

  • getCTM()
    獲得視窗坐標(biāo)系到當(dāng)前元素??坐標(biāo)系的變換矩陣

  • getScreenCTM()
    獲得瀏覽器坐標(biāo)系到當(dāng)前元素??坐標(biāo)系的變換矩陣

  • getTransformToElement()
    獲得從指定元素的??坐標(biāo)系到當(dāng)前元素的??坐標(biāo)系的變換矩陣

HSL

格式:HSL(H,S%,L%)-顏色、飽和度篙贸、亮度
取值范圍:H:[0,359] hue
S,L:[0,100] saturation lightness
優(yōu)勢:符合人類描述顏色的習(xí)慣

筆刷

  • 繪制紋理
  • <pattern>標(biāo)簽
  • patternUnits和patternContentUnits

Path

<path d="M0,0L10,20C30-10,40,20,100,100" stroke="red">
L10,20      命令 參數(shù)
#參數(shù)之間可以用空格或逗號隔開投队,有一種情況例外,就是下一個數(shù)值是負數(shù)锡宋。

<path d="M0,0L10,20C30-10,40,20,100,100" stroke="red">
<path d="M 0 0 L 10 20 C 30 -10 40 20 100 100" stroke="red">
<path d="M 0 0, L 10 20, C 30 -10 40 20 100 100" stroke="red">
#以上三種表示方式效果是一致的

Path命令匯總

M = moveto(M X,Y) :將畫筆移動到指定的坐標(biāo)位置
L = lineto(L X,Y) :畫直線到指定的坐標(biāo)位置
H = horizontal lineto(H X):畫水平線到指定的X坐標(biāo)位置
V = vertical lineto(V Y):畫垂直線到指定的Y坐標(biāo)位置
A = elliptical Arc(A RX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧線
A = (rx, ry, xr, laf, sf, x, y) - 繪制弧線
Z = closepath():關(guān)閉路徑
C = curveto(C X1,Y1,X2,Y2,ENDX,ENDY):三次貝賽曲線
S = smooth curveto(S X2,Y2,ENDX,ENDY)
Q = quadratic Belzier curve(Q X,Y,ENDX,ENDY):二次貝賽曲線
T = smooth quadratic Belzier curveto(T ENDX,ENDY):映射
備注:
坐標(biāo)軸為以(0,0)為中心曹抬,X軸水平向右东亦,Y軸水平向下。
所有指令大小寫均可扒披。大寫絕對定位,參照全局坐標(biāo)系圃泡;小寫相對定位碟案,參照父容器坐標(biāo)系
M 起點X,起點Y L(直線)終點X颇蜡,終點Y H(水平線)終點X V(垂直線)終點Y
A指令
允許不閉合价说。可以想像成是橢圓的某一段风秤,共七個參數(shù):
A RX,RY,XROTATION,FLAG1,FLAG2,X,Y
RX,RY指所在橢圓的半軸大小
XROTATION指橢圓的X軸與水平方向順時針方向夾角鳖目,可以想像成一個水平的橢圓繞中心點順時針旋轉(zhuǎn)XROTATION的角度。
FLAG1只有兩個值缤弦,1表示大角度弧線疑苔,0為小角度弧線。
FLAG2只有兩個值,確定從起點至終點的方向惦费,1為順時針兵迅,0為逆時針
X,Y為終點坐標(biāo)

弧線命令

  • A (rx, ry, xr, laf, sf, x, y) - 繪制弧線
  • 最復(fù)雜的命令
  • rx -(radius-x)弧線所在橢圓的 x 半軸長
  • ry -(radius-y)弧線所在橢圓的 y 半軸長
  • xr -(xAxis-rotation)弧線所在橢圓的長軸角度
  • laf -(large-arc-flag)是否選擇弧長較長的那一段弧[1表示大角度弧線,0為小角度弧線薪贫。]
  • sf -(sweep-flag)是否選擇逆時針方向的那一段弧[1為順時針恍箭,0為逆時針]
  • x, y - 弧的終點位置

SVG文本

  • <text>和<tspan>創(chuàng)建文本
  • 垂直居中問題
  • <textPath>讓文本在指定路徑上排列
  • <a>插入超鏈接

<text>和<tspan>標(biāo)簽

  • x和y屬性 - 定位標(biāo)準
  • dx和dy屬性 - 字形偏移
  • style屬性 - 設(shè)置樣式

SVG計時器

·requestAnimationFrame(frame)   //類似于setTimeout
function frame(){
    t += 0.01;
    update(t);
    requestAnimationFrame(frame);
}
frame();
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞧省,隨后出現(xiàn)的幾起案子扯夭,更是在濱河造成了極大的恐慌,老刑警劉巖鞍匾,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件交洗,死亡現(xiàn)場離奇詭異,居然都是意外死亡橡淑,警方通過查閱死者的電腦和手機构拳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梁棠,“玉大人置森,你說我怎么就攤上這事》” “怎么了凫海?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長男娄。 經(jīng)常有香客問我行贪,道長,這世上最難降的妖魔是什么模闲? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任建瘫,我火速辦了婚禮,結(jié)果婚禮上围橡,老公的妹妹穿的比我還像新娘暖混。我一直安慰自己,他們只是感情好翁授,可當(dāng)我...
    茶點故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布拣播。 她就那樣靜靜地躺著,像睡著了一般收擦。 火紅的嫁衣襯著肌膚如雪贮配。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天塞赂,我揣著相機與錄音泪勒,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛圆存,可吹牛的內(nèi)容都是我干的叼旋。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼沦辙,長吁一口氣:“原來是場噩夢啊……” “哼夫植!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起油讯,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤详民,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后陌兑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沈跨,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年兔综,在試婚紗的時候發(fā)現(xiàn)自己被綠了饿凛。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,724評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡邻奠,死狀恐怖笤喳,靈堂內(nèi)的尸體忽然破棺而出为居,到底是詐尸還是另有隱情碌宴,我是刑警寧澤,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布蒙畴,位于F島的核電站贰镣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏膳凝。R本人自食惡果不足惜碑隆,卻給世界環(huán)境...
    茶點故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹬音。 院中可真熱鬧上煤,春花似錦、人聲如沸著淆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽永部。三九已至独泞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苔埋,已是汗流浹背懦砂。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荞膘。 一個月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓罚随,卻偏偏與公主長得像,于是被迫代替她去往敵國和親羽资。 傳聞我的和親對象是個殘疾皇子毫炉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,627評論 2 350

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

  • 導(dǎo)語 黑科技來了,Google在Android5.X中增加了對SVG矢量圖形的支持削罩,這對于創(chuàng)造新的高效率動畫具有很...
    一個有故事的程序員閱讀 17,295評論 9 64
  • SVG是什么 可縮放矢量圖形(Scalable Vector Graphics),一種用來描述二位矢量圖形的XML...
    greenteaObject閱讀 2,587評論 0 1
  • ??Google在Android 5.x中增加了對svg矢量圖形的支持瞄勾,這對于創(chuàng)建新的高效率動畫具有非常重大的意義...
    瓊珶和予閱讀 4,574評論 2 4
  • 你說你要減肥,可你還是很肥弥激;你說你要按時起床进陡,可到點了你還在被窩;你說你要跑步微服,可從未見過你邁出一步趾疚。 大家總是說...
    蘭玨與宣閱讀 277評論 0 2
  • 春天繡著大地,長安的織工們繡著太子大婚要用的禮服以蕴,帷幔等等糙麦。就在這上上下下一片緊張,期待的時候丛肮,秦王回朝了赡磅。叫長安...
    何青猊閱讀 179評論 0 0