js学习20-(svg)

SVG

svg简介

SVG指可伸缩矢量图形 (Scalable Vector Graphics);

SVG是使用 XML 来描述二维图形和绘图程序的语言、是可伸缩的、是万维网联盟的标准、是开放的标准。

SVG与 JPEG 和 GIF 图像比起来,尺寸更小,且可压缩性更强。

SVG文件是纯粹的 XML,可被非常多的工具读取和修改(比如记事本)

SVG用来定义用于网络的基于矢量的图形,使用 XML 格式定义图形,
​ 图像在放大或改变尺寸的情况下其图形质量不会有所损失,
​ 图像可在任何的分辨率下被高质量地打印,图像中的文本是可选的,
​ 同时也是可搜索的(很适合制作地图);

SVG与诸如 DOM 和 XSL 之类的 W3C 标准是一个整体,可以与 Java 技术一起运行;

SVG有一些预定义的形状元素,可被开发者使用和操作:

  • 矩形
  • 圆形
  • 椭圆
  • 线
  • 折线
  • 多边形
  • 路径

svg的使用方式:

1、svg文件可以直接插入到网页中,称为DOM的一部分,然后使用js和css进行操作。

2、svg代码可以写在一个独立文件中,然后用“img/object/iframe/embed”标签插入到网页中

3、css可以直接使用svg文件。

4、svg还可以转为BASE64编码,作为Data url写入网页中。

SVG语法

1、svg标签

svg代码都写在顶层标签
中。

<svg width="100" height="100" viewBox="50 50 50 50">
		<circle id="myCircle" cx="100" cy="100" r="50"/>
</svg>

​ svg中的width和height属性制定了svg图像在html元素中所占的宽度和高度。既可以采用相对单位,也可以采用绝对定位。若不指定这两个属性,则svg图像默认大小是300px(宽)*150px(高)。

​ viewBox属性:该属性有四个属性值,分别表示左上角的横坐标和纵坐标、视窗的高度和宽度。

​ 注意:视口必须适配所在的空间。上面例子中,视口的大小是5050,由于svg图像的大小是100100,则视口会放大去适配svg图像的大小,即放大了四倍。

​ 若svg中不指定width、height属性,只指定viewBox属性,则相当于只给定svg图像的长宽比,此时svg图像的默认大小将等于所在的html元素的大小。

2、circle标签


标签代表的是圆形

<svg width="100" height="100" viewBox="50 50 50 50">
		<circle id="myCircle" cx="100" cy="100" r="50"/>
</svg>

属性:

​ cx:圆心的横坐标。

​ cy:圆心的纵坐标。

​ r:圆的半径

​ 也可以设置class和id,便于在css中设定样式。

svg在css属性:

​ fill:填充色

​ stroke:描边色

​ stroke-width:边框宽度

3、line标签

标签用来绘制直线

<svg width="200" height="200" >
		<line id="myLine" x"0" y1="0" x2="200" y2="200" style="stroke: #FF0000; stroke-width: 2px;"/>
</svg>

属性:

​ x1和y1:代表的是line起点的横纵坐标。

​ x2和y2:代表的是line终点的横纵坐标。

​ style:代表的是line的样式

4、polyline标签

标签用于绘制折线

<svg width="200" height="200" >
		<polyline id="mypolyLine" points="3,3 20,15 52,100 40,189" fill="none" style=" stroke: #FF0000; stroke-width: 2px;"/>
</svg>

属性:

​ points:代表的是折线中每个端点的坐标。横坐标与纵坐标之间用逗号隔开,端点与端点之间用空格隔开。

​ fill:代表的折线间的填充。none代表的是不填充

5、rect标签


标签用于绘制矩形

<svg width="200" height="200" >
			<rect id="mypolyLine" x="20" y="20" width="100" height="80" style=" stroke: #FF0000; stroke-width: 2px; fill:#6495ED"/>
</svg>

6、ellipse标签


标签用于绘制椭圆

<svg width="200" height="200" >
			<ellipse id="myEllipse" cx="100" cy="100" rx="20" ry="40" style=" stroke: #FF0000; stroke-width: 5px; fill:#6495ED"/>
</svg>

属性:

​ cx和xy:代表的是椭圆的圆心的横纵坐标

​ rx:代表的是椭圆的横轴半径(单位像素)

​ ry:代表的是椭圆的纵轴半径(单位像素)

7、polygon标签

标签用于绘制多边形

<svg width="200" height="200" >
			<polygon  points="3,3 20,15 52,100 40,189 20,130 3,3" style=" stroke: #000000; stroke-width: 5px; fill:#6495ED"/>
</svg>

属性:

​ points:代表的是多边形的每个端点的坐标。横坐标与纵坐标之间用逗号隔开,端点与端点之间用空格隔开。

8、path标签

标签用于绘制路径

<svg width="200" height="200" >
			<path  d="M 15,5 L 40,50 L 40,80 L 100,80 z" style=" stroke: #000000; stroke-width: 5px; fill:#6495ED"/>
</svg>

属性:

​ d:代表的是绘制顺序,它的值是一个长字符串,每个字母表示一个绘制动作,后面跟着坐标。

​ M/m:表示移动到(moveto)

​ L/l:表示画直线到(lineto)

​ Z/z:表示闭合路径

9、text标签


标签用于绘制文本

<svg width="200" height="200" >
			<text x="50" y="50">hello svg</text>
</svg>

属性:

​ x和y:代表的是文本区块基线起点的横纵坐标。文本的样式可以在css中进行设定。

10、use标签


标签用于复制一个形状

<svg width="500" height="500" >
			<circle id="myCircle" cx="100" cy="100" r="50"/>
			<use href="#myCircle" x="200" y="0"/>
</svg>

属性:

​ href:代表的是指定所要复制的节点。

​ x和y:代表的是左上角的坐标

11、g标签


标签是用来将多个形状组成一个组,便于复用。

<svg width="800" height="800" >
   <g id="dobleCircle">
    <circle id="myCircle" cx="100" cy="100" r="50"/>
    <use href="#myCircle" x="200" y="0"/>
   </g>
   
   <use href="#dobleCircle" x="300"></use>
</svg>

12、defs标签


标签用于隐藏某些内容

<svg width="800" height="800" >
			<defs>
				<g id="dobleCircle">
					<circle id="myCircle" cx="100" cy="100" r="50"/>
					<use href="#myCircle" x="200" y="0"/>
				</g>
			</defs>
			
			<use href="#dobleCircle" x="300"></use>
</svg>

13、pattern标签

标签用于自定义一个形状,该形状可以被引用来平铺一个区域。

<svg width="800" height="800" >
   <pattern id="dots" width="100" height="100" patternUnits="userSpaceOnUse">
    <circle id="myCircle" cx="50" cy="50" r="50"/>
   </pattern>
   
   <rect x="0" y="0" width="100%" height="100%" fill="url(#dots)"/>
</svg>

​ pattern标签将圆形定义为一个dots模式。

​ 属性patternUnits=”userSpaceOnUse“表示pattern的宽度和长度是是实际的像素值。然后指定该模式去去填充下面绘制的矩形。

14、image标签

标签用于插入图片文件。

<svg width="800" height="800" >
			<image xlink:href="img/1.jpg" width="50%" height="50%"></image>
</svg>

属性:

​ xlink:href属性表示图像的来源

15、animate标签

标签用于产生动画效果

<svg width="800" height="800" >
			<rect x="0" y="0" width="100" height="60" fill="#feac8e">
				<animate attributeName="x" from="0" to="500" dur="2s" repeatCount="indefinite"  />
			</rect>	
</svg>

属性:

​ attributeName:发生动画效果的属性名

​ from:单次动画的初始值

​ to:单次动画的结束值

​ dur:单次动画的持续时间

​ repeatCount:动画的循环模式

16、animateTransform标签

标签对css的transform属性不起作用,如果需要变形,则需要使用标签

<svg width="800" height="800" >
			<rect x="0" y="0" width="100" height="60" fill="#feac8e" >
				<animateTransform attributeName="transform" type="rotate" begin="0s" dur="10s" from="0 200 200" to="360 400 400"  repeatCount="indefinite"  />
			</rect>	
</svg>

属性:

​ type:代表变形的类型。上述例子中是旋转

​ from和to:第一个值是角度值,第二个和第三个值是旋转中心的坐标。

​ from="0 200 200"代表的是开始时,角度为0,围绕(200,200)开始旋转;

​ to="360 400 400"代表的是结束时,角度为360,围绕(400,400)旋转

JavaScript操作

1、dom操作

当svg代码直接写在了html中,则可以直接用dom操作

svg部分
<svg width="100" height="100" viewBox="50 50 50 50">
			<circle id="myCircle" cx="100" cy="100" r="50"/>
</svg>


js部分
var myCircle = document.querySlecter("#myCircle")
myCircle.setAttribute('r',60)

2、获取svg

使用、、标签引入svg时,可与获取svg dom

若使用的是标签引入svg,则无法获取svg dom

var svgObject = document.querySlecter("object");
var svgIframe = document.querySlecter("iframe");
var svgEmbed = document.querySlecter("embed");

例子

效果图:
在这里插入图片描述


版权声明:本文为qq_42760119原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>