请马上登录,朋友们都在花潮里等着你哦:)
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在单个 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>
|