马黑黑 发表于 2024-9-30 11:02

《茉》小播svg版

<style>
#mydiv {
        margin: 30px auto;
        width: fit-content;
        height: fit-content;
        outline: 1px dashed gray;
}
#tbox {
        width: 720px;
        height: 300px;
        padding: 10px;
        tab-size: 4;
}
.tMid { text-align: center; }
</style>

<h2>效果:</h2>
<div id="mydiv">
<svg width="400" height="400" viewBox="-200 -200 400 400" xmlns="http://www.w3.org/2000/svg">
        <defs>
                <g id="circle">
                        <circle cx="0" cy="0" r="8" fill="skyblue" stroke="none"/>
                </g>
        </defs>
        <use href="#circle"/>
</svg>
</div>
<h2>SVG代码:</h2>
<p class="tMid"><textarea id="tbox"></textarea></p>

<script>
var msvg = mydiv.querySelector('svg');

mkCircles = (circles, columns, target) => {
        let angle = 360 / columns,
                sR = target.getAttribute('width') / 2,
                outstr = '';
        Array(columns).fill('').forEach((_,a) => {
                Array(circles).fill('').forEach((_,b) => {
                        let xx = sR / circles;
                        outstr += `\t<use href="#circle" transform="rotate(${angle * a}) translate(${b * xx + xx - 10})"/>\n`;
                });
        });
        target.innerHTML += outstr;
};

mkCircles(4,12,msvg);
tbox.value = msvg.outerHTML;
</script>

马黑黑 发表于 2024-9-30 11:03

<h2>一楼完整源码</h2>
<div class="hE"><pre>
&lt;style&gt;
#mydiv {
        margin: 30px auto;
        width: fit-content;
        height: fit-content;
        outline: 1px dashed gray;
}
#tbox {
        width: 720px;
        height: 300px;
        padding: 10px;
        tab-size: 4;
}
.tMid { text-align: center; }
&lt;/style&gt;

&lt;h2&gt;效果:&lt;/h2&gt;
&lt;div id="mydiv"&gt;
&lt;svg width="400" height="400" viewBox="-200 -200 400 400" xmlns="http://www.w3.org/2000/svg"&gt;
        &lt;defs&gt;
                &lt;g id="circle"&gt;
                        &lt;circle cx="0" cy="0" r="8" fill="skyblue" stroke="none"/&gt;
                &lt;/g&gt;
        &lt;/defs&gt;
        &lt;use href="#circle"/&gt;
&lt;/svg&gt;
&lt;/div&gt;
&lt;h2&gt;SVG代码:&lt;/h2&gt;
&lt;p class="tMid"&gt;&lt;textarea id="tbox"&gt;&lt;/textarea&gt;&lt;/p&gt;

&lt;script&gt;
var msvg = mydiv.querySelector('svg');

mkCircles = (circles, columns, target) =&gt; {
        let angle = 360 / columns,
                sR = target.getAttribute('width') / 2,
                outstr = '';
        Array(columns).fill('').forEach((_,a) =&gt; {
                Array(circles).fill('').forEach((_,b) =&gt; {
                        let xx = sR / circles;
                        outstr += `\t&lt;use href="#circle" transform="rotate(${angle * a}) translate(${b * xx + xx - 10})"/&gt;\n`;
                });
        });
        target.innerHTML += outstr;
};

mkCircles(4,12,msvg);
tbox.value = msvg.outerHTML;
&lt;/script&gt;
</pre></div>

<script>
var sc = document.createElement('script');
sc.chartset = 'utf-8';
sc.src = 'https://638183.freep.cn/638183/web/helight/helight.js';
document.body.appendChild(sc);
</script>

马黑黑 发表于 2024-9-30 11:12

二楼代码修改简要说明:

20~24行:defs标签内的分组标签 g 是画了一个小圆,小圆的颜色等属性在这里添加;如果画别的,就用别的标签取代 circle 标签,这样可以得到不同粒子形状的效果;

25行:使用 use 标签实例化 id="circle" 的 g 分组对象,即小圆。这是最中心的那个小圆;

34~45行:mkCircles() 函数,参数三个,依次是粒子圈数(从圆心往外扩展的粒子圈数)、粒子条数(列,从中心到圆周点的直线)和父元素对象(svg)。函数绘制了svg里的粒子,貌似没有改动的地方;

47行:执行函数;

48行:显示svg完整代码。

梦江南 发表于 2024-9-30 15:27

谢谢老师详细讲解代码。辛苦了!{:4_190:}

梦江南 发表于 2024-9-30 15:28

祝老师国庆节阖家开心快乐!{:4_187:}

花飞飞 发表于 2024-9-30 15:59

一圈圈往外放射,漂亮。。。

红影 发表于 2024-9-30 17:35

这个是单色的了,弄了12列呢。
这个讲解好,对照着svg代码里的数据,更容易理解js里的设定了{:4_199:}

马黑黑 发表于 2024-9-30 17:43

红影 发表于 2024-9-30 17:35
这个是单色的了,弄了12列呢。
这个讲解好,对照着svg代码里的数据,更容易理解js里的设定了

js负责俺规则绘制,不然这么多代码手写不简单

马黑黑 发表于 2024-9-30 17:43

花飞飞 发表于 2024-9-30 15:59
一圈圈往外放射,漂亮。。。

{:4_180:}

马黑黑 发表于 2024-9-30 17:43

梦江南 发表于 2024-9-30 15:28
祝老师国庆节阖家开心快乐!

节日快乐

红影 发表于 2024-9-30 17:54

这个和《茉》帖子里的好像实现的方法还是不一样的{:4_204:}

红影 发表于 2024-9-30 21:23

马黑黑 发表于 2024-9-30 17:43
js负责俺规则绘制,不然这么多代码手写不简单

是啊,有JS的设计规划,所有的粒子都老老实实站在了规定的位置上了{:4_173:}

马黑黑 发表于 2024-9-30 22:07

红影 发表于 2024-9-30 21:23
是啊,有JS的设计规划,所有的粒子都老老实实站在了规定的位置上了

首先得会手写,才能指挥JS去写

马黑黑 发表于 2024-9-30 22:13

红影 发表于 2024-9-30 17:54
这个和《茉》帖子里的好像实现的方法还是不一样的

差不多的,只是画圆的方式不同,此外这个可以存为 .svg 当图片使用。

红影 发表于 2024-9-30 22:13

马黑黑 发表于 2024-9-30 22:07
首先得会手写,才能指挥JS去写

是的,先知道想得到什么效果,然后用JS 去实现。只是不会指挥它啊{:4_173:}

马黑黑 发表于 2024-9-30 22:15

红影 发表于 2024-9-30 22:13
是的,先知道想得到什么效果,然后用JS 去实现。只是不会指挥它啊

吃透那个 mkCircles() 函数就差不多了,就那么10来行代码

红影 发表于 2024-9-30 22:34

马黑黑 发表于 2024-9-30 22:13
差不多的,只是画圆的方式不同,此外这个可以存为 .svg 当图片使用。

这样的图片没地方上传啊,很多地方不让传。

红影 发表于 2024-9-30 22:35

马黑黑 发表于 2024-9-30 22:15
吃透那个 mkCircles() 函数就差不多了,就那么10来行代码

这个现在还没本事{:4_173:}

马黑黑 发表于 2024-9-30 22:35

红影 发表于 2024-9-30 22:34
这样的图片没地方上传啊,很多地方不让传。

那就直接用代码

马黑黑 发表于 2024-9-30 22:36

红影 发表于 2024-9-30 22:35
这个现在还没本事

没几句是难懂的
页: [1] 2 3 4 5 6
查看完整版本: 《茉》小播svg版