马黑PHP整站系统

js+svg绘制多重动画六边形

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

在单个 svg path 路径六边形动画基础上加以改进:① 每一个 path 包裹之下的两个 animate 动画,begin 属性除第一组动画为 0s 即立即执行外,其余的动画均等上一个动画开始后加 1s 开始执行。② <user> 标签变为 6*6=36 个,6个一组,每一组对标一个路径;旋转分两种情形,1、3、5 按 60度*序号 获取角度值,2、4、6 按 60度*序号+30 获取角度值。以下是实现代码和演示效果、XML svg代码:

<svg id="hsvg" width="320" height="320" viewBox="0 0 320 320" fill="none" stroke="#008000" stroke-linecap="round"></svg>

<script>
drawHexagon = (total) => {
	let pathstr = '\n\t<defs>', usestr = '';
	Array(total).fill(0).forEach((id,idx) => {
		id = idx + 1;
		let bstr = idx === 0 ? '0s' : `p1.begin+${idx}s`;
		pathstr += `
		<path id="r${id}">
			<animate id="p${id}" attributeName="d" values="m160,160l0,0 0,0;m130,110l30,-17 30,17;m130,60l30,-17 30,17;m160,20l0,0 0,0" dur="6s" repeatCount="indefinite" begin="${bstr}"/>
			<animate attributeName="stroke-width" values="0;4;4;4;0" dur="6s" repeatCount="indefinite" begin="${bstr}"/>
		</path>`;
		Array(total).fill(0).forEach((u,k) => {
			u = k + 1;
			let angle = id % 2 === 0 ? 360 / total * k + 30 : 360 / total * k;
			usestr += `\n\t<use xlink:href="#r${id}" transform="rotate(${angle} 160 160)"></use>`;
		});
	});
	pathstr += '\n\t</defs>\n';
	return pathstr + usestr + '\n';
};

hsvg.innerHTML = drawHexagon(6);
</script>

XML代码:

前一篇: js+svg绘制动画六边形
下一篇: 没有了

发表评论:

       

评论列表 [3条]

#3 | 飞飞 于 2024-9-12 19:35 发布: 再来说一句良心话,它是真的好看啊,比SVG的更漂亮。。层数还可以灵活设置。。

#2 | 小希 于 2024-9-12 19:33 发布: 果然昨晚看了十秒钟就溜走是明智的。。今天老师成品都出来了,这么多个眼生的单词,小白跟本啃不动。。。。。知难而退,我决定躺平,直接套用~~

#1 | 悄然 于 2024-9-12 09:33 发布: 漂亮!你就是最帅的白大神,……

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