摘要:標(biāo)簽標(biāo)簽用于將多個形狀組成一個組,方便復(fù)用。表示的寬度和長度是實際的像素值。標(biāo)簽標(biāo)簽對的屬性不起作用,如果需要變形,就要使用標(biāo)簽。注意,如果使用標(biāo)簽插入文件,就無法獲取。
代碼優(yōu)化永遠(yuǎn)是程序員亙古不變的需求,而合理的利用SVG圖片來代替部分PNG/JPG等格式的圖片則是前端優(yōu)化重要的一環(huán),既然是優(yōu)化,那我們先來看看SVG圖片都有哪些優(yōu)勢:
SVG 可被非常多的工具讀取和修改(比如記事本)
SVG 與 JPEG 和 GIF 圖像比起來,尺寸更小,且可壓縮性更強。
SVG 是可伸縮的
SVG 圖像可在任何的分辨率下被高質(zhì)量地打印
SVG 可在圖像質(zhì)量不下降的情況下被放大
SVG 圖像中的文本是可選的,同時也是可搜索的(很適合制作地圖)
SVG 可以與 Java 技術(shù)一起運行
SVG 是開放的標(biāo)準(zhǔn)
SVG 文件是純粹的 XML
不了解SVG的同學(xué)現(xiàn)在一定一臉問號,就跟我第一次見他們一樣,別著急,我們從基礎(chǔ)看起。
什么是SVG?SVG 是一種基于 XML 語法的圖像格式,全稱是可縮放矢量圖(Scalable Vector Graphics)。其他圖像格式都是基于像素處理的,SVG 則是屬于對圖像的形狀描述,所以它本質(zhì)上是文本文件,體積較小,且不管放大多少倍都不會失真。此外SVG 是萬維網(wǎng)聯(lián)盟的標(biāo)準(zhǔn),SVG 與諸如 DOM 和 XSL 之類的 W3C 標(biāo)準(zhǔn)是一個整體。
怎么使用?在 HTML5 中,您能夠?qū)?SVG 元素直接嵌入 HTML 頁面中,例如上面的那顆小紅心:
SVG 代碼也可以寫在一個以.svg結(jié)尾的文件中,然后用
的width屬性和height屬性,指定了 SVG 圖像在 HTML 元素中所占據(jù)的寬度和高度。除了相對單位,也可以采用絕對單位(單位:像素)。如果不指定這兩個屬性,SVG 圖像默認(rèn)大小是300像素(寬) x 150像素(高)。 如果只想展示 SVG 圖像的一部分,就要指定viewBox屬性。 注意,視口必須適配所在的空間。上面代碼中,視口的大小是 50 x 50,由于 SVG 圖像的大小是 100 x 100,所以視口會放大去適配 SVG 圖像的大小,即放大了四倍。 如果不指定width屬性和height屬性,只指定viewBox屬性,則相當(dāng)于只給定 SVG 圖像的長寬比。這時,SVG 圖像的默認(rèn)大小將等于所在的 HTML 元素的大小。 2. 上面的代碼定義了三個圓。 class屬性用來指定對應(yīng)的 CSS 類。 SVG 的 CSS 屬性與網(wǎng)頁元素有所不同。 fill:填充色 3. 上面代碼中, 4. 5. 6. 7. 8. M:移動到(moveto) 10. 標(biāo)簽 的href屬性指定所要復(fù)制的節(jié)點,x屬性和y屬性是左上角的坐標(biāo)。另外,還可以指定width和height坐標(biāo)。 11. 12. 13. 上面代碼中, 14. 上面代碼中, 15. 上面代碼中,矩形會不斷移動,產(chǎn)生動畫效果。 attributeName:發(fā)生動畫效果的屬性名。 16. 上面代碼中, 1. DOM操作 上面代碼插入網(wǎng)頁之后,就可以用 CSS 定制樣式。 然后,可以用 JavaScript 代碼操作 SVG。 上面代碼指定,如果點擊圖形,就改寫circle元素的r屬性。 2. 獲取 SVG DOM 注意,如果使用 3. 讀取 SVG 源碼 使用XMLSerializer實例的serializeToString()方法,獲取 SVG 元素的代碼。 4. SVG 圖像轉(zhuǎn)為 Canvas 圖像 然后,當(dāng)圖像加載完成后,再將它繪制到元素。 SVG能做的遠(yuǎn)不止這些,利用SVG做的動畫效果,文字效果我們以后給大家詳細(xì)講解,今天就先到這里吧。 肆客足球 最新最全的足球資訊,最火爆的球迷社區(qū),直播中超、歐洲賽事,全面豐富的數(shù)據(jù)統(tǒng)計,還有球星推特、Ins、社交動態(tài),原汁原味,掃描下方二維碼即可下載.red {
fill: red;
}
.fancy {
fill: none;
stroke: black;
stroke-width: 3pt;
}
stroke:描邊色
stroke-width:邊框?qū)挾?/p>
L:畫直線到(lineto)
Z:閉合路徑
9.
標(biāo)簽用于復(fù)制一個形狀。
from:單次動畫的初始值。
to:單次動畫的結(jié)束值。
dur:單次動畫的持續(xù)時間。
repeatCount:動畫的循環(huán)模式。
可以在多個屬性上面定義動畫。
如果 SVG 代碼直接寫在 HTML 網(wǎng)頁之中,它就成為網(wǎng)頁 DOM 的一部分,可以直接用 DOM 操作。circle {
stroke-width: 5;
stroke: #f00;
fill: #ff0;
}
circle:hover {
stroke: #090;
fill: #f8f8f8;
}
var mycircle = document.getElementById("mycircle");
mycircle.addEventListener("click", function(e) {
console.log("circle clicked - enlarging");
mycircle.setAttribute("r", 60);
}, false);
使用、、標(biāo)簽插入 SVG 文件,可以獲取 SVG DOM。
var svgObject = document.getElementById("object").contentDocument;
var svgIframe = document.getElementById("iframe").contentDocument;
var svgEmbed = document.getElementById("embed").getSVGDocument();
標(biāo)簽插入 SVG 文件,就無法獲取 SVG DOM。
由于 SVG 文件就是一段 XML 文本,因此可以通過讀取 XML 代碼的方式,讀取 SVG 源碼。var svgString = new XMLSerializer()
.serializeToString(document.querySelector("svg"));
首先,需要新建一個Image對象,將 SVG 圖像指定到該Image對象的src屬性。var img = new Image();
var svg = new Blob([svgString], {type: "image/svg+xml;charset=utf-8"});
var DOMURL = self.URL || self.webkitURL || self;
var url = DOMURL.createObjectURL(svg);
img.src = url;
img.onload = function () {
var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
};
小結(jié)
console.log("右下角點好看呦")
技術(shù)放肆聊QQ群:617413307 歡迎程序員朋友積極加群,共同進步
技術(shù)放肆聊公眾號,每日干貨,最前沿的技術(shù)知識,掃描下方二維碼關(guān)注:
推一下自家APP
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/100924.html
摘要:前端面試題總結(jié)持續(xù)更新中為什么只需要寫需要來規(guī)范瀏覽器的行為讓瀏覽器按照它們應(yīng)該的方式來運行基于所以需要對進行引用,才能告知瀏覽器文檔所使用的文檔類型。 前端面試題總結(jié)——H5(持續(xù)更新中) 1.HTML5 為什么只需要寫 ? HTML5 需要doctype來規(guī)范瀏覽器的行為,讓瀏覽器按照它們應(yīng)該的方式來運行; HTML4.01基于SGML,所以需要對DTD進行引用,才能告知瀏覽器文檔...
摘要:前端面試每日題,以面試題來驅(qū)動學(xué)習(xí),每天進步一點讓努力成為一種習(xí)慣,讓奮斗成為一種享受相信堅持的力量學(xué)習(xí)不打烊,充電加油只為遇到更好的自己,天無節(jié)假日,每天早上點純手工發(fā)布面試題死磕自己,愉悅大家。 《論語》,曾子曰:吾日三省吾身(我每天多次反省自己)。 前端面試每日3+1題,以面試題來驅(qū)動學(xué)習(xí),每天進步一點! 讓努力成為一種習(xí)慣,讓奮斗成為一種享受!相信 堅持 的力量!??! ...
閱讀 3384·2021-11-23 09:51
閱讀 2533·2021-11-09 09:46
閱讀 1545·2019-08-30 15:54
閱讀 3224·2019-08-30 14:22
閱讀 2972·2019-08-29 12:40
閱讀 1685·2019-08-26 10:33
閱讀 1864·2019-08-23 17:09
閱讀 1623·2019-08-23 16:11