svgdrawer:defs和g应用举例
<p><svg id="msvg" width="400" height="400" viewBox="0 0 400 400"></svg></p><script>
var sc = document.createElement('script');
sc.src = 'https://638183.freep.cn/638183/web/js2024/svgdr_trial.js';
document.body.appendChild(sc);
sc.onload = () => {
var dr = _dr(msvg);
dr.defs('defs');
dr.g('cross').addTo('defs');
dr.line(10,200,390,200,'skyblue','12').set('stroke-lineCap','round').addTo('cross');
dr.line(200,10,200,390,'skyblue','12').set('stroke-lineCap','round').addTo('cross');
for(var i = 0, total = 3; i < total; i ++) {
dr.use('#cross').transform(`rotate(${180 / total * i} 200 200)`);
}
};
</script>
代码:
<p><svg id="msvg" width="400" height="400" viewBox="0 0 400 400"></svg></p>
<script>
var sc = document.createElement('script');
sc.src = 'https://638183.freep.cn/638183/web/js2024/svgdr_trial.js';
document.body.appendChild(sc);
sc.onload = () => {
var dr = _dr(msvg);
dr.defs('defs');
dr.g('cross').addTo('defs');
dr.line(10,200,390,200,'skyblue','12').set('stroke-lineCap','round').addTo('cross');
dr.line(200,10,200,390,'skyblue','12').set('stroke-lineCap','round').addTo('cross');
for(var i = 0, total = 3; i < total; i ++) {
dr.use('#cross').transform(`rotate(${180 / total * i} 200 200)`);
}
};
</script>
先画一条蓝色的加圆头的粗横线,再画一条同样规格的竖线。。。
都通过addTo加到g的分组('cross'),放入创建好的defs('defs');标签内
两组同时设计数量后,通过计算180除以数量得到旋转角度
这一步看着有点面熟。。
并设轩旋转点在200 200位置
如果改动旋转点,会有点意想不到的效果出现。。{:4_173:} 本帖最后由 花飞飞 于 2024-10-21 21:03 编辑 <br /><br /> 飞飞说得对,就是这样把g分组添加到defs,得到一个大十字。
然后旋转分组,就得到上面效果了。 本来还在想旋转的是60度,怎么看着分隔是30度,就是因为是十字的缘故。
如果取消竖线,让total = 6;也能得到这个效果。 g分组有个名称,然后对这个名称做旋转等设置,可以对分组里的所有都有效。 红影 发表于 2024-10-21 21:09
g分组有个名称,然后对这个名称做旋转等设置,可以对分组里的所有都有效。
是的。现在,实现CSS动画已经不是问题了 花飞飞 发表于 2024-10-21 20:54
先画一条蓝色的加圆头的粗横线,再画一条同样规格的竖线。。。
都通过addTo加到g的分组('cross'),放入 ...
理解正确 花飞飞 发表于 2024-10-21 20:55
两组同时设计数量后,通过计算180除以数量得到旋转角度
这一步看着有点面熟。。
并设轩旋转点在200 200位 ...
会移位。不过有时候移位也是一种效果 花飞飞 发表于 2024-10-21 20:59
本帖最后由 花飞飞 于 2024-10-21 21:03 编辑
效果也是杠杠的 红影 发表于 2024-10-21 21:05
本来还在想旋转的是60度,怎么看着分隔是30度,就是因为是十字的缘故。
如果取消竖线,让total = 6;也能得 ...
是的,多一倍就成 本帖最后由 花飞飞 于 2024-10-24 18:35 编辑 <br /><br />
<p><svg id="msvg" width="400" height="400" viewBox="0 0 400 400"></svg></p>
<script>
var sc = document.createElement('script');
sc.src = 'https://638183.freep.cn/638183/web/js2024/svgdr_trial.js';
document.body.appendChild(sc);
sc.onload = () => {
var dr = _dr(msvg);
dr.defs('defs');
dr.g('cross').addTo('defs');
dr.line(10,200,390,200,'skyblue','1').set('stroke-lineCap','round').addTo('cross');
dr.line(200,10,200,390,'skyblue','1').set('stroke-lineCap','round').addTo('cross');
for(var i = 0, total = 20; i < total; i ++) {
dr.use('#cross').transform(`rotate(${180 / total * i} 200 100)`);
}
};
</script> 马黑黑 发表于 2024-10-21 21:53
会移位。不过有时候移位也是一种效果
代码很神奇,即使移位也有一种怪味美感 马黑黑 发表于 2024-10-21 21:54
效果也是杠杠的
像不像个鸟巢{:4_173:} 花飞飞 发表于 2024-10-21 21:58
代码很神奇,即使移位也有一种怪味美感
对。你那个作品有意识流的味道,或者是抽象派的画作 花飞飞 发表于 2024-10-21 21:59
像不像个鸟巢
是有点 马黑黑 发表于 2024-10-21 21:59
对。你那个作品有意识流的味道,或者是抽象派的画作
这可不是我的作品,你的作品抽象后的样子{:4_170:} 马黑黑 发表于 2024-10-21 21:59
是有点
交给画面它可以有无限可能,就这一串代码可以出好多效果