前言
图形
SVG
代码语言:javascript复制<svg id="test_1"
xmlns="http://www.w3.org/2000/svg"
xml:space="preserve"
width="600"
height="400"
viewBox="0 0 300 200">
<g style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1">
<rect x="10" y="10" width="100" height="40" rx="20"/>
</g>
</svg>
SVG中
- width/height 是图形的宽/高
viewBox="0 0 300 200"
是画布的属性
如上面的示例 画布尺寸比图形小,那么我们看到的画布中的图形就会同比例放大。
圆形
代码语言:javascript复制<circle id="_x31_"
opacity="1"
fill="#d2fae3"
cx="332.081" cy="149.346" r="73"
stroke-width="1" stroke="#82eeb5"
/>
矩形
代码语言:javascript复制<rect id="_x31_"
opacity="1"
width="100" height="100"
x="100" y="100"
fill="#d2fae3"
stroke-width="1" stroke="#82eeb5"
/>
菱形
代码语言:javascript复制<polygon points="0,50 50,0 100,50 50,100"
style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"/>
文字
代码语言:javascript复制<text x="0" y="15" font-size="18"
style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1">Hello World</text>
不带边框
代码语言:javascript复制<text x="0" y="15" font-size="18"
style="fill:#333333;">Hello World</text>
圆角矩形
代码语言:javascript复制<rect x="10" y="10" width="100" height="40" rx="4"
style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"/>
两侧为圆形的矩形
代码语言:javascript复制<rect x="10" y="10" width="100" height="40" rx="20"
style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"/>
Path
这里是画了个心形
代码语言:javascript复制<g style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"
transform="translate(100 0) scale(1 1)">
<path id="heart" d="M 10,30 A 20,20 0,0,1 50,30 A 20,20 0,0,1 90,30 Q 90,60 50,90 Q 10,60 10,30 z"/>
</g>
组
相同样式的图形或者需要一起添加事件可以用g
来分组
g
不能设置宽高等位置属性,只能设置内部元素的样式及添加响应事件。
内部元素的定位也是相对于svg的。
代码语言:javascript复制<g style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1">
<rect x="10" y="10" width="100" height="40" rx="20"/>
</g>
比如
代码语言:javascript复制<g stroke="#82eeb5" fill="#d2fae3" stroke-width="1">
<circle cx="25" cy="25" r="15"/>
<circle cx="40" cy="25" r="15"/>
<circle cx="55" cy="25" r="15"/>
</g>
transform
代码语言:javascript复制<svg xmlns="http://www.w3.org/2000/svg"
xml:space="preserve"
width="600"
height="400"
viewBox="-1 -1 600 400">
<rect x="50" y="20" width="100" height="40" rx="4"
transform="translate(-50 -20)"
style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"/>
</svg>
事件
代码语言:javascript复制<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>流程图-SVG版</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg"
id="m_svg"
xml:space="preserve"
width="800"
height="600"
viewBox="-1 -1 800 600">
<rect x="50" y="20" width="100" height="40" rx="4"
transform="translate(-50 -20)"
style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"
onmousedown="selectElement(event)"/>
<rect x="100" y="120" width="100" height="40" rx="4"
transform="translate(-50 -20)"
style="fill:#d2fae3;stroke:#82eeb5;stroke-width:1"
onmousedown="selectElement(event)"/>
</svg>
<script type="text/javascript">
var currentX = 0;
var currentY = 0;
selectedElement = null;
let currentMatrix = {
x: 0,
y: 0
};
var m_svg = document.getElementById("m_svg");
m_svg.setAttributeNS(null, "onmousemove", "moveElement(evt)");
m_svg.setAttributeNS(null, "onmouseup", "deselectElement(evt)");
function selectElement(evt) {
selectedElement = evt.target;
currentX = evt.clientX;
currentY = evt.clientY;
currentMatrix.x = parseInt(selectedElement.getAttributeNS(null, "x"));
currentMatrix.y = parseInt(selectedElement.getAttributeNS(null, "y"));
}
function moveElement(evt) {
var dx = evt.clientX - currentX;
var dy = evt.clientY - currentY;
currentMatrix.x = dx;
currentMatrix.y = dy;
selectedElement.setAttributeNS(null, "x", currentMatrix.x);
selectedElement.setAttributeNS(null, "y", currentMatrix.y);
currentX = evt.clientX;
currentY = evt.clientY;
}
function deselectElement(evt) {
if (selectedElement !== null) {
selectedElement.removeAttributeNS(null, "onmousemove");
selectedElement.removeAttributeNS(null, "onmouseout");
selectedElement.removeAttributeNS(null, "onmouseup");
selectedElement = null;
}
}
</script>
</body>
</html>