HTML5怎样运用SVG(代码示例)-
代码优化永远是程序员亘古不变的需求,而合理的应用SVG图片来取代局部PNG/JPG等格局的图片则是前端优化重要的一环,既然是优化,那我们先来看看SVG图片都是什么优势:
SVG 可被非常多的工具读取和修改(比方记事本)
SVG 与 JPEG 和 GIF 图像比起来,尺寸更小,且可紧缩性更强。
SVG 是可伸缩的
SVG 图像可在任何的辨论率下被高质量地打印
SVG 可在图像质量不下落的状况下被放大
SVG 图像中的文本是可选的,同时也是可搜寻的(很适合制作地图)
SVG 可以与 Java 技术一起运转
SVG 是开放的规范
SVG 文件是纯粹的 XML
几个SVG图片小例子:
我们来看一下第三个分享图标的代码:
不理解SVG的同窗此刻一定一脸问号,就跟我首先次见他们同样,别焦急,我们从根基看起。
什么是SVG?
SVG 是一种基于 XML 语法的图像格局,全称是可缩放矢量图(Scalable Vector Graphics)。其他图像格局都是基于像素处置的,SVG 则是属于对图像的外形描述,所以它本质上是文本文件,体积较小,且无论放大多少倍都不会失真。此外SVG 是万维网同盟的规范,SVG 与诸如 DOM 和 XSL 之类的 W3C 规范是一个整体。
怎么运用?
在 HTML5 中,您能够将 SVG 元素直接嵌入 HTML 页面中,例如上面的那颗小红心:
SVG 代码也可以写在一个以.svg结尾的文件中,然后用、
、
、
等标签插入网页。
CSS也可以运用svg
.logo { background: url(logo.svg); }
SVG 文件还可以转为 BASE64 编码,然后作为 Data URI 写入网页。
SVG的语法
1.
SVG 代码都放在顶层标签
要是只想展现 SVG 图像的一局部,就要指定viewBox属性。
注意,视口必需适配所在的空间。上面代码中,视口的大小是 50 x 50,因为 SVG 图像的大小是 100 x 100,所以视口会放大去适配 SVG 图像的大小,即放大了四倍。
要是不指定width属性和height属性,只指定viewBox属性,则相当于只给定 SVG 图像的长宽比。这时,SVG 图像的默许大小将等于所在的 HTML 元素的大小。
2.
上面的代码定义了三个圆。
class属性用来指定对应的 CSS 类。
.red { fill: red; } .fancy { fill: none; stroke: black; stroke-width: 3pt; }
SVG 的 CSS 属性与网页元素有所不一样。
fill:添补色
stroke:描边色
stroke-width:边框宽度
3.
上面代码中,
4.
5.
6.
7.
8.
M:挪移到(moveto)
L:画直线到(lineto)
Z:闭合途径
9.
10.
11.
12.
13.
上面代码中,
14.
上面代码中,
15. 标签
标签用于发生动画结果。
上面代码中,矩形会一直挪移,发生动画结果。
的属性含义如下。
attributeName:产生动画结果的属性名。
from:单次动画的初始值。
to:单次动画的完毕值。
dur:单次动画的延续工夫。
repeatCount:动画的轮回模式。
可以在多个属性上面定义动画。
16. 标签
标签对 CSS 的transform属性不起作用,要是需要变形,就要运用标签。
上面代码中,的结果为扭转(rotate),这时from和to属性值有三个数字,首先个数字是角度值,第二个值和第三个值是扭转核心的坐标。from="0 200 200"表示开端时,角度为0,环绕(200, 200)开端扭转;to="360 400 400"表示完毕时,角度为360,环绕(400, 400)扭转。
JavaScript 操纵SVG
1. DOM操纵
要是 SVG 代码直接写在 HTML 网页之中,它就成为网页 DOM 的一局部,可以直接用 DOM 操纵。
上面代码插入网页之后,就可以用 CSS 定制样式。
circle { stroke-width: 5; stroke: #f00; fill: #ff0; } circle:hover { stroke: #090; fill: #f8f8f8; }
然后,可以用 JavaScript 代码操纵 SVG。
var mycircle = document.getElementById('mycircle'); mycircle.addEventListener('click', function(e) { console.log('circle clicked - enlarging'); mycircle.setAttribute('r', 60); }, false);
上面代码指定,要是点击图形,就改写circle元素的r属性。
2. 猎取 SVG DOM
运用、
、
标签插入 SVG 文件,可以猎取 SVG DOM。
var svgObject = document.getElementById('object').contentDocument; var svgIframe = document.getElementById('iframe').contentDocument; var svgEmbed = document.getElementById('embed').getSVGDocument();
注意,要是运用标签插入 SVG 文件,就没法猎取 SVG DOM。
3. 读取 SVG 源码
因为 SVG 文件就是一段 XML 文本,因而可以通过读取 XML 代码的方式,读取 SVG 源码。
运用XMLSerializer实例的serializeToString()办法,猎取 SVG 元素的代码。
var svgString = new XMLSerializer() .serializeToString(document.querySelector('svg'));
4. SVG 图像转为 Canvas 图像
第一,需要创建一个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); };
小结
SVG能做的远不止这些,应用SVG做的动画结果,文字结果我们今后给大家细致解说,今天就先到这里吧。
以上就是HTML5怎样运用SVG(代码示例)的细致内容,更多请关注 百分百源码网 其它相干文章!