评论资讯 [ 总 775 则 ]
·悄然 - 2026-1-17 10:21
·飞飞 - 2026-1-17 10:19
·马黑 - 2026-1-17 10:09
·飞飞 - 2026-1-15 16:20
·悄然 - 2026-1-15 16:19
·马黑 - 2026-1-15 12:19
·悄然 - 2026-1-15 08:58
·飞飞 - 2026-1-14 15:25
·飞飞 - 2026-1-1 08:43
·飞飞 - 2025-12-24 18:49
·飞飞 - 2026-1-17 10:19
·马黑 - 2026-1-17 10:09
·飞飞 - 2026-1-15 16:20
·悄然 - 2026-1-15 16:19
·马黑 - 2026-1-15 12:19
·悄然 - 2026-1-15 08:58
·飞飞 - 2026-1-14 15:25
·飞飞 - 2026-1-1 08:43
·飞飞 - 2025-12-24 18:49
友情链接
网站统计
svg : rect to path 演示
【说明】当 rect 设置了圆角,简单的 rect 转 path 机制变得无比复杂,需要一一处理四个角。以下代码考虑到了常规的情形:
<style>
.mysvg { border: 1px solid gray; fill: none; stroke: steelblue; }
</style>
<svg class="mysvg" width="200" height="200">
<rect id="Rect" x="10" y="10" width="100" height="100" rx="8" ry="18"></rect>
</svg>
<svg class="mysvg" width="200" height="200">
<path id="cPath" d="M10 100 H190"></path>
</svg>
<div id="pathMsg"></div>
<script>
let createPath = (eRect) => {
let x = 1 * eRect.getAttribute('x'),
y = 1 * eRect.getAttribute('y'),
w = 1* eRect.getAttribute('width'),
h = 1* eRect.getAttribute('height'),
rx = 1 * eRect.getAttribute('rx') || 0,
ry = 1 * eRect.getAttribute('ry') || 0;
console.log(rx,ry);
return (rx === 0 || ry === 0) ?
`M${x} ${y} h${w} v${h} h-${w} v-${h}` :
`M${x} ${y + ry}
a${rx} ${ry} 0 0 1 ${rx} -${ry}
h${w - rx * 2}
a${rx} ${ry} 0 0 1 ${rx} ${ry}
v${h - ry * 2}
a${rx} ${ry} 0 0 1 -${rx} ${ry}
h-${w - rx * 2}
a${rx} ${ry} 0 0 1 -${rx} -${ry}
v-${h - ry * 2}`;
};
cPath.setAttribute('d',createPath(Rect));
pathMsg.innerText = createPath(Rect);
</script>
前一篇: svg : ellipse to path 演示
下一篇: 生成svg星形图案和路径
发表评论:
评论列表 [0条]

