快速上手SVG

925 阅读5分钟

SVG语法

1.viewBox "50 50 50 50" (分别是左上角的横坐标和纵坐标、视口的宽度和高度)

`

如果不指定width属性和height属性,只指定viewBox属性,则相当于只给定 SVG 图像的长宽比。这时,SVG 图像的默认大小将等于所在的 HTML 元素的大小。 `

2.circle (标签代表圆形) cx="90" cy="50" r="25" class="red"

(cx、cy、r属性分别为横坐标、纵坐标和半径,单位为像素。坐标都是相对于svg画布的左上角原点。)

  • fill:填充色
  • stroke:描边色
  • stroke-width:边框宽度

3.line (标签用来绘制直线) x1="0" y1="0" x2="200" y2="0"

`
x1属性和y1属性,表示线段起点的横坐标和纵坐标;x2属性和y2属性,表示线段终点的横坐标和纵坐标;style属性表示线段的样式。
`

4.polyline (标签用于绘制一根折线) points="3,3 30,28 3,53" fill="none" stroke="black"

`
points属性指定了每个端点的坐标,横坐标与纵坐标之间与逗号分隔,点与点之间用空格分隔。
`

5.rect(标签用于绘制矩形) rect x="0" y="0" height="100" width="200"

`
x属性和y属性,指定了矩形左上角端点的横坐标和纵坐标;width属性和height属性指定了矩形的宽度和高度(单位像素)
`

6.ellipse(标签用于绘制椭圆) ellipse cx="60" cy="60" ry="40" rx="20"

`
cx属性和cy属性,指定了椭圆中心的横坐标和纵坐标(单位像素);rx属性和ry属性,指定了椭圆横向轴和纵向轴的半径(单位像素)
`

7.polygon(标签用于绘制多边形) polygon fill="green" stroke="orange" stroke-width="1" points="0,0 100,0 100,100 0,100 0,0"

`
points属性指定了每个端点的坐标,横坐标与纵坐标之间与逗号分隔,点与点之间用空格分隔
`

8.path(标签用于制路径) path d="

M 18,3 L 46,3 L 46,40 L 61,40 L 32,68 L 3,40 L 18,40 Z"

`
d属性表示绘制顺序,它的值是一个长字符串,每个字母表示一个绘制动作,后面跟着坐标。
`
* M:移动到(moveto)
* L:画直线到(lineto)
* Z:闭合路径

9.use(用于复制一个形状) circle id="myCircle" cx="5" cy="5" r="4"

`
href属性指定所要复制的节点,x属性和y属性是<use>左上角的坐标。另外,还可以指定width和height坐标
`

10.text(标签用于绘制文本)

<text x="50" y="25">Hello World</text> x属性和y属性,表示文本区块基线(baseline)起点的横坐标和纵坐标

  • 11.use(标签用于复制一个形状)

<circle id="myCircle" cx="5" cy="5" r="4"/> <use href="#myCircle" x="10" y="0" fill="blue" /> href属性指定所要复制的节点,x属性和y属性是<use>左上角的坐标

11.g(标签用于将多个形状组成一个组)

<g id="myCircle"> <text x="25" y="20">圆形</text> <circle cx="50" cy="50" r="20"/> </g>

12.defs(标签用于自定义形状,它内部的代码不会显示)

<defs> <g id="myCircle"> <text x="25" y="20">圆形</text> <circle cx="50" cy="50" r="20"/> </g> </defs>

13.pattern(标签用于自定义一个形状,该形状可以被引用来平铺一个区域)

<defs> <pattern id="dots" x="0" y="0" width="100" height="100" patternUnits="userSpaceOnUse"> <circle fill="#bee9e8" cx="50" cy="50" r="35" /> </pattern> </defs> <pattern>标签将一个圆形定义为dots模式。patternUnits="userSpaceOnUse"表示<pattern>的宽度和长度是实际的像素值。然后,指定这个模式去填充下面的矩形。

14.animate(标签用于产生动画效果)

* attributeName:发生动画效果的属性名
* from:单次动画的初始值
* to:单次动画的结束值
* dur:单次动画的持续时间
* repeatCount:动画的循环模式

<rect x="0" y="0" width="100" height="100" fill="#feac5e"> <animate attributeName="x" from="0" to="500" dur="2s" repeatCount="indefinite" /> </rect> 效果:矩形会不断移动,产生动画效果

15.animateTransform(标签对 CSS 的transform属性不起作用,如果需要变形,就要使用标签)

<rect x="250" y="250" width="50" height="50" fill="#4bc0c8"> <animateTransform attributeName="transform" type="rotate" begin="0s" dur="10s" from="0 200 200" to="360 400 400" repeatCount="indefinite" /> </rect> <animateTransform>的效果为旋转(rotate),这时from和to属性值有三个数字,第一个数字是角度值,第二个值和第三个值是旋转中心的坐标。from="0 200 200"表示开始时,角度为0,围绕(200, 200)开始旋转;to="360 400 400"表示结束时,角度为360,围绕(400, 400)旋转

SVG-JavaScript 操作

1.DOM 操作

var mycircle = document.getElementById('mycircle');

mycircle.addEventListener('click', function(e) {
  console.log('circle clicked - enlarging');
  mycircle.setAttribute('r', 60);
}, false);

2.获取 SVG DOM

var svgObject = document.getElementById('object').contentDocument;
var svgIframe = document.getElementById('iframe').contentDocument;
var svgEmbed = document.getElementById('embed').getSVGDocument();

3.读取 SVG 源码

var svgString = new XMLSerializer().serializeToString(document.querySelector('svg'));

相关博文

阮一峰的网络日志-SVG 图像入门教程