HTML SVG 笔记 | SMIL svg 动画
一个svg文件
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<circle cx="100" cy="50" r="40" stroke="black"
stroke-width="2" fill="red" />
</svg>
可以在 html 中直接键入<svg> 标签
也可通过以下标签将 SVG 文件嵌入 HTML 文档:<embed>、<object> 或者 <iframe>。
<embed src="circle1.svg" type="image/svg+xml" />
<object data="circle1.svg" type="image/svg+xml"></object>
<iframe src="circle1.svg"></iframe>
viewBox="0 0 400 400" 可用于svg的尺寸 映射到内部的尺寸 类似视窗的移动拉伸缩放。
preserveAspectRatio 保留纵横比,针对 viewBox 的变形规则。
内部图形标签
| 公共属性 | |
|---|---|
fill | 填充颜色 |
| fill-opacity | 填充透明度 |
stroke | 描边颜色 |
stroke-width | 描边宽度 |
| stroke-opacity | 描边透明度 |
| stroke-linecap | butt/square/round 线段两端 |
| stroke-linejoin | miter/round/bevel 两条线段衔接处 |
stroke-dasharray | 控制用来描边的点划线的图案范式,每段虚线之间的间距,如果设置为图形总长就会全显示 |
stroke-dashoffset | 虚线偏移量 如果偏移设为总长就会看不到虚线 |
| transform | 参考css |
<rect> 矩形
| 属性 | |
|---|---|
x | 横坐标 |
y | 纵坐标 |
width | 矩形宽 |
height | 矩形高 |
<circle> 圆
| 属性 | |
|---|---|
cx | 圆心横坐标 |
cy | 圆心纵坐标 |
r | 半径 |
<ellipse> 椭圆
| 属性 | |
|---|---|
cx | 圆心横坐标 |
cy | 圆心纵坐标 |
xr | 横向半径 |
yr | 纵向半径 |
<line> 线段/直线
| 属性 | |
|---|---|
x1 | 起点横坐标 |
y1 | 起点纵坐标 |
x2 | 终点横坐标 |
y2 | 终点纵坐标 |
<polygon> 多边形
| 属性 | 语法 | |
|---|---|---|
points | x1,y1 x2,y2 ··· x1,y1 | 端点集 |
<polyline> 折线
| 属性 | 语法 | |
|---|---|---|
points | x1,y1 x2,y2 ··· xn,yn | 端点集 |
<path> 路径
| 属性 | 语法 | |
|---|---|---|
d | 命令1 参数若干 命令2 参数若干 ··· | 绘制路径点 |
| 命令 | 参数格式 | |
|---|---|---|
M | x y | 移动绘画起点 到 x,y |
L | x y | 由当前位置向 x,y 绘制线段 |
| V/H | x/y | 由当前位置向 x/y 绘制垂直/水平线段 |
C | x1 y1 x2 y2 x y | 由当前位置向 x,y 绘制曲线(三次贝塞尔曲线) |
S | x2 y2 x y | 由当前位置向 x,y 绘制平滑曲线 |
Q | xo yo x y | 绘制二次贝塞尔曲线(起始结束共用一个控制点 xo,yo) |
T | x y | 绘制平滑二次贝塞尔曲线 |
A | rx ry x-axis-rotation large-arc-flag sweep-flag x y | 从当前画笔位置开始绘制一条椭圆弧线到(x,y)指定的坐标。rx 和 ry 分别为 X轴和 Y轴的半径。x-axis-rotation 为 x轴旋转度数。large-arc-flag 代表优弧还是劣弧(0表示劣弧,1表示优弧)。sweep-flag 为弧线方向 0 为顺时针 1 为逆时针 |
Z | 连接起始点闭合路径 |
命令大写字母表示绝对定位,小写字母表示相对定位
<text>
text-anchor 文本流方向
start、end、middle、inherit
<tspan> 类似 <span>
<image>
xlink:href
x
y
width
height
<g> 组
对组内元素批量赋值
<defs>
<linearGradient> 和 <radialGradient> 渐变
<clipPath> 剪切路径
<mask> 遮罩
<filter> 滤镜
<feGaussianBlur> 模糊
<feOffset> 阴影
<feMerge> 混合滤镜效果
如混合 feGaussianBlur 和 feOffset 制造模糊的阴影
HTML5可以直接嵌入SVG
<iframe src="image.svg"></iframe> <img src="image.svg" style="display:block;width:200px;height:200px" /> <!-- 通过背景图片 --> <div style="display:block;width:200px;height:200px;background: url(./image.svg) no-repeat;background-size: 100%;" ></div>
SMIL – svg 动画化
使用方法:紧跟被设置图形
<set> 可以设置图形属性值
<set attributeName="cy" to="新值" begin=“2s”/>
// begin:开始时间
// end: 结束动画时间
// calcMode: 运动模式 discrete(离散)、linear(线性)、paced、spline(贝塞尔)
// keySpline 设置贝塞尔曲线
// keyTimes 各个帧事件间隔 配合 values
// by: 相对值
// additive: 取 sum 累加动画效果,用于连续多个动画
<animate> 多了 from
<animate attributeName=“cx” from=“56.7573” to=“64.7573” dur=“2s” repeatCount=“indefinite”/>
<animateTransform> 使用 transform 的变换
<animateTransform attributeName="transform" type="rotate" from="0 0 0" to="360 0 0" begin="0s" dur="10s" repeatCount="indefinite" />
// values: 多段值
<animateMotion> 指定运动路径
<animateMotion path="M10,50 q60,50 100,0 q60,-50 100,0" begin="0s" dur="10s" repeatCount="indefinite" />
begin 与 end 可以使用 其他元素的开始结束时间
xxx.begin/end或者其他元素的事件xxx.click
内容会不断更新,欢迎批评指正。

浙公网安备 33010602011771号