马黑黑 发表于 2024-11-3 08:09

Bloom

<style>
        #mydiv { margin: 30px 0 30px calc(50% - 593px); width: 1024px; height: 640px; background: url('https://638183.freep.cn/638183/t24/4/bloom.jpg') no-repeat center/cover; box-shadow: 4px 4px 8px gray; position: relative; --state: running; }
        #msvg { position: absolute; left: calc(50% - 100px); top: 40px; cursor: pointer; animation: rot 8s linear infinite var(--state); }
        #msvg rect { opacity: .75; }
        #msvg:hover rect { ry: 30; }
        #vid { position: absolute; width: 100%; height: 100%; object-fit: cover; mix-blend-mode: screen; -webkit-mask: linear-gradient(transparent 10%, red 30%, red 0); pointer-events: none; }
        #fsbtn { position: absolute; left: 48%; bottom: 20px; color: darkred; background: lightgreen; padding: 4px 6px; border: 2px solid snow; border-radius: 8px; user-select: none; cursor: pointer; transition: .5s; }
        @keyframes rot { to { transform: rotate(-360deg); } }
</style>

<div id="mydiv">
        <audio id="aud" src="https://music.163.com/song/media/outer/url?id=2622474530" autoplay loop></audio>
        <video id="vid" src="https://img.tukuppt.com/video_show/15653652/01/04/17/6141baa659673.mp4" autoplay loop muted></video>
        <svg id="msvg" width="240" height="240" xmlns="http://www.w3.org/2000/svg" viewBox="-120 -120 240 240">
        <span id="fsbtn"></span>
</div>

<scripttype="module">
import fscreen from 'https://638183.freep.cn/638183/web/mod/fscreen.js';
var sc = document.createElement('script');
sc.src = 'https://638183.freep.cn/638183/web/js/svgdr.js';
document.body.appendChild(sc);
sc.onload = () => {
        var dr = _dr('msvg');
        var tt = 20;
        for(var i = 0; i < tt; i ++) {
                dr.rect(-50,-40, 100,80, 'none','lightgreen', 4).transform(`rotate(${i * 360 / tt}) translate(50)`);
        }
        msvg.onclick = () => {
                msvg.style.setProperty('--state', ['paused','running'][+aud.paused]);
                aud.paused ? (aud.play(), vid.play()) : (aud.pause(), vid.pause());
        };
};
aud.play().catch(_ => dr.svg.style.setProperty('--state', 'paused'));
fscreen.fs('mydiv', 'fsbtn');
</script>

马黑黑 发表于 2024-11-3 08:10

<h3>帖子代码</h3>
<div id="hEdiv"><pre id="hEpre">
&lt;style&gt;
        #mydiv { margin: 30px 0 30px calc(50% - 593px); width: 1024px; height: 640px; background: url('https://638183.freep.cn/638183/t24/4/bloom.jpg') no-repeat center/cover; box-shadow: 4px 4px 8px gray; position: relative; --state: running; }
        #msvg { position: absolute; left: calc(50% - 100px); top: 40px; cursor: pointer; animation: rot 8s linear infinite var(--state); }
        #msvg rect { opacity: .75; }
        #msvg:hover rect { ry: 30; }
        #vid { position: absolute; width: 100%; height: 100%; object-fit: cover; mix-blend-mode: screen; -webkit-mask: linear-gradient(transparent 10%, red 30%, red 0); pointer-events: none; }
        #fsbtn { position: absolute; left: 48%; bottom: 20px; color: darkred; background: lightgreen; padding: 4px 6px; border: 2px solid snow; border-radius: 8px; user-select: none; cursor: pointer; transition: .5s; }
        @keyframes rot { to { transform: rotate(-360deg); } }
&lt;/style&gt;

&lt;div id="mydiv"&gt;
        &lt;audio id="aud" src="https://music.163.com/song/media/outer/url?id=2622474530" autoplay loop&gt;&lt;/audio&gt;
        &lt;video id="vid" src="https://img.tukuppt.com/video_show/15653652/01/04/17/6141baa659673.mp4" autoplay loop muted&gt;&lt;/video&gt;
        &lt;svg id="msvg" width="240" height="240" xmlns="http://www.w3.org/2000/svg" viewBox="-120 -120 240 240"&gt;
        &lt;span id="fsbtn"&gt;&lt;/span&gt;
&lt;/div&gt;

&lt;scripttype="module"&gt;
import fscreen from 'https://638183.freep.cn/638183/web/mod/fscreen.js';
var sc = document.createElement('script');
sc.src = 'https://638183.freep.cn/638183/web/js/svgdr.js';
document.body.appendChild(sc);
sc.onload = () =&gt; {
        var dr = _dr('msvg');
        var tt = 20;
        for(var i = 0; i &lt; tt; i ++) {
                dr.rect(-50,-40, 100,80, 'none','lightgreen', 4).transform(`rotate(${i * 360 / tt}) translate(50)`);
        }
        msvg.onclick = () =&gt; {
                msvg.style.setProperty('--state', ['paused','running'][+aud.paused]);
                aud.paused ? (aud.play(), vid.play()) : (aud.pause(), vid.pause());
        };
};
aud.play().catch(_ =&gt; dr.svg.style.setProperty('--state', 'paused'));
fscreen.fs('mydiv', 'fsbtn');
&lt;/script&gt;
</pre></div>

<script type="module">
import hlight from 'https://638183.freep.cn/638183/web/mod/helight.js';
hlight.hl(hEdiv, hEpre);
</script>

马黑黑 发表于 2024-11-3 08:12

本帖配套 svg教程·画矩形 - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! 做矩形绘制的演示

醉美水芙蓉 发表于 2024-11-3 08:12

醉美水芙蓉 发表于 2024-11-3 08:13

梦江南 发表于 2024-11-3 08:27

这个像水车的播放器很漂亮,点一下就圆形了。

红影 发表于 2024-11-3 08:32

哇,这个第一眼看去,好像梯形的组合似的,而且中间像是加了圆形辐射线。结果呢,看着很复杂的图案,竟然只是简单矩形旋转形成的,这太奇妙了{:4_199:}

红影 发表于 2024-11-3 08:32

即使简单的图形,组合以后也变化无穷。令人惊叹{:4_187:}

红影 发表于 2024-11-3 08:39

这个制作直接把矩形中心落在了旋转中心,连位移都变方便了。聪明。
鼠标触动后,通过改变圆角半径,让图形更带来非常奇妙的变化。只修改ry,另一个跟它一样变化。{:4_204:}

红影 发表于 2024-11-3 08:43

那个触碰后的效果绝对想不到是用矩形做的,很像椭圆做出来的。要是不看代码只根据效果猜图形做法,很容易猜错。从这个帖子更加体会到圆角半径的妙用{:4_199:}

红影 发表于 2024-11-3 08:45

图面漂亮,视频也用得好,貌似有微风细雨呵护着盛开的花朵{:4_187:}

花飞飞 发表于 2024-11-3 09:16

这个画矩形实例,20个矩形旋转后编在一起,形成这么妙的图案,乍一看跟梯形似的。。
色彩鲜艳,画面清爽,看得人心情大好。。

花飞飞 发表于 2024-11-3 09:18

dr.rect(-50,-40, 100,80, 'none','lightgreen', 4).transform(`rotate(${i * 360 / tt}) translate(30)`);
这一句超级厉害了。。。
把矩形参数和旋转合在一起写了。。昨天的《Atlas》这两句是分开的。。原来可以这样合并来写,简省。。

花飞飞 发表于 2024-11-3 09:30

transform(`rotate(${i * 360 / tt}) translate(50)`);
这一句包含了矩形自身旋转和整个小播旋转。。。
每个矩形只占小播的一半,通过自身旋转后形成一个圆形,
小播旋转位置在画布的中心。。同时也在每个矩形底部的中间
老师随手整的这个图案也是烧脑。{:4_170:}
不过数学是真的美呀。。好看。。

花飞飞 发表于 2024-11-3 09:33

#msvg:hover rect { ry: 30; }这句也很灵敏,
明明下方画矩形时并没有ry设置,
鼠标触碰也可以生效。。虽缺但一直在的节奏。。{:4_173:}

马黑黑 发表于 2024-11-3 11:46

醉美水芙蓉 发表于 2024-11-3 08:13
这个播放器点击会变形状!

{:4_190:}

马黑黑 发表于 2024-11-3 11:46

梦江南 发表于 2024-11-3 08:27
这个像水车的播放器很漂亮,点一下就圆形了。

好玩吧

马黑黑 发表于 2024-11-3 11:46

花飞飞 发表于 2024-11-3 09:30
transform(`rotate(${i * 360 / tt}) translate(50)`);
这一句包含了矩形自身旋转和整个小播旋转。。。
...

数学之美

马黑黑 发表于 2024-11-3 11:47

花飞飞 发表于 2024-11-3 09:33
#msvg:hover rect { ry: 30; }这句也很灵敏,
明明下方画矩形时并没有ry设置,
鼠标触碰也可以生效。。虽 ...

svg有不少属性可以通过CSS设置,官网上经常也会提到

马黑黑 发表于 2024-11-3 11:48

红影 发表于 2024-11-3 08:32
哇,这个第一眼看去,好像梯形的组合似的,而且中间像是加了圆形辐射线。结果呢,看着很复杂的图案,竟然只 ...

几何是很神奇的
页: [1] 2 3 4
查看完整版本: Bloom