帖子代码
<style>
#tz { margin: 30px 0 30px calc(50% - 621px); width: 1080px; height: 608px; background: url('https://638183.freep.cn/638183/t24/webp2/war.webp') no-repeat center/cover; box-shadow: 4px 4px 8px gray; z-index: 1; position: relative; }
#mysvg { --state: running; position: absolute; left: calc(50% - 300px); top: calc(50% - 250px); width: 600px; height: 500px; }
.ball { filter: drop-shadow(-10px -10px 20px darkred); transition: .4s; cursor: pointer; animation: flash .1s var(--delay) linear infinite alternate var(--state); }
.ball:hover { r: 30; }
@keyframes flash { to { opacity: .5; } }
</style>
<div id="tz">
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1941982" autoplay loop></audio>
<svg id="mysvg"></svg>
</div>
<script>
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(mysvg), balls = [];
dr.path('M300 160 Q-200 -150,300 450 Q800 -150,300 160', 'none','none').id('path');
var len = path.getTotalLength();
for(var i = 0, tt = 30; i < tt; i ++) {
var point = path.getPointAtLength(len / tt * i);
var color = '#' + Math.random().toString(16).substring(2,8),
delay = Math.random() * i * -0.1;
dr.circle(point.x,point.y,20,color).set('class','ball').style(`--delay: ${delay}s`);
balls.push(dr.elm);
}
balls.forEach(b => b.onclick = () => {
dr.svg.style.setProperty('--state', ['paused','running'][+aud.paused]);
aud.paused ? aud.play() : aud.pause();
});
aud.play().catch(_ => dr.svg.style.setProperty('--state', 'paused'));
};
</script>
|