马黑PHP整站系统

svg : rect to path 演示

位置: 首页 > 代码集锦[ 发布时间: 2023.10.1  作者: 马黑  阅读: 139 ]

【说明】当 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条]

Copyright © 2023 All Right Reserved 马黑PHP文章管理整站系统v1.8
联系我们: gxblk@163.com