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>
<h3>帖子代码</h3>
<div id="hEdiv"><pre id="hEpre">
<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>
</pre></div>
<script type="module">
import hlight from 'https://638183.freep.cn/638183/web/mod/helight.js';
hlight.hl(hEdiv, hEpre);
</script>
本帖配套 svg教程·画矩形 - 马黑黑教程专版 - 花潮论坛 - Powered by Discuz! 做矩形绘制的演示
这个像水车的播放器很漂亮,点一下就圆形了。 哇,这个第一眼看去,好像梯形的组合似的,而且中间像是加了圆形辐射线。结果呢,看着很复杂的图案,竟然只是简单矩形旋转形成的,这太奇妙了{:4_199:} 即使简单的图形,组合以后也变化无穷。令人惊叹{:4_187:} 这个制作直接把矩形中心落在了旋转中心,连位移都变方便了。聪明。
鼠标触动后,通过改变圆角半径,让图形更带来非常奇妙的变化。只修改ry,另一个跟它一样变化。{:4_204:} 那个触碰后的效果绝对想不到是用矩形做的,很像椭圆做出来的。要是不看代码只根据效果猜图形做法,很容易猜错。从这个帖子更加体会到圆角半径的妙用{:4_199:} 图面漂亮,视频也用得好,貌似有微风细雨呵护着盛开的花朵{:4_187:} 这个画矩形实例,20个矩形旋转后编在一起,形成这么妙的图案,乍一看跟梯形似的。。
色彩鲜艳,画面清爽,看得人心情大好。。 dr.rect(-50,-40, 100,80, 'none','lightgreen', 4).transform(`rotate(${i * 360 / tt}) translate(30)`);
这一句超级厉害了。。。
把矩形参数和旋转合在一起写了。。昨天的《Atlas》这两句是分开的。。原来可以这样合并来写,简省。。
transform(`rotate(${i * 360 / tt}) translate(50)`);
这一句包含了矩形自身旋转和整个小播旋转。。。
每个矩形只占小播的一半,通过自身旋转后形成一个圆形,
小播旋转位置在画布的中心。。同时也在每个矩形底部的中间
老师随手整的这个图案也是烧脑。{:4_170:}
不过数学是真的美呀。。好看。。 #msvg:hover rect { ry: 30; }这句也很灵敏,
明明下方画矩形时并没有ry设置,
鼠标触碰也可以生效。。虽缺但一直在的节奏。。{:4_173:} 醉美水芙蓉 发表于 2024-11-3 08:13
这个播放器点击会变形状!
{:4_190:} 梦江南 发表于 2024-11-3 08:27
这个像水车的播放器很漂亮,点一下就圆形了。
好玩吧 花飞飞 发表于 2024-11-3 09:30
transform(`rotate(${i * 360 / tt}) translate(50)`);
这一句包含了矩形自身旋转和整个小播旋转。。。
...
数学之美 花飞飞 发表于 2024-11-3 09:33
#msvg:hover rect { ry: 30; }这句也很灵敏,
明明下方画矩形时并没有ry设置,
鼠标触碰也可以生效。。虽 ...
svg有不少属性可以通过CSS设置,官网上经常也会提到 红影 发表于 2024-11-3 08:32
哇,这个第一眼看去,好像梯形的组合似的,而且中间像是加了圆形辐射线。结果呢,看着很复杂的图案,竟然只 ...
几何是很神奇的