绿叶清舟 发表于 2023-1-26 19:12

寂寞烟火


<style>
#papa { left: -250px; width: 1100px; height: 700px; background: gray url('https://pic.imgdb.cn/item/63cd43ffbe43e0d30e2dac2e.jpg') no-repeat center/cover; box-shadow: 3px 3px 20px #000; position: relative; }
#canv { position: absolute; }
#disc { position: absolute; width: 40px; height: 40px; left: 10px; bottom: 10px; background: conic-gradient(#000000,#969696,#000000,#969696,#000000); mask: radial-gradient(transparent 4px,red 0); -webkit-mask: radial-gradient(transparent 4px,red 0); border-radius: 50%; cursor: pointer; animation: rot 2s linear infinite; }
#lrcbox { position: absolute; left: 60px; bottom: 10px;font: bold 22px / 40px sans-serif; color: #CCCCCC; text-shadow: 2px 2px 4px #222; }
@keyframes rot { to { transform: rotate(360deg); } }
</style>

<div id="papa">
      <span id="lrcbox">寂寞烟火·2023</span>
      <canvas id="canv"></canvas>
      <span id="disc"></span>
</div>

<script>
(function() {
      let num = (min, max) => Math.floor(Math.random() * (max-min+1)) + min;
      let ctx = canv.getContext('2d');
      let w = canv.width = papa.offsetWidth, h = canv.height = papa.offsetHeight, particles = [], idx = 0, aud = new Audio();
      
      aud.src = 'http://music.163.com/song/media/outer/url?id=2015018957.mp3';
      aud.loop = true;
      aud.autoplay = true;
      
      disc.style.animationPlayState = aud.paused ? 'paused' : 'running';
      disc.onclick = () => aud.paused ? aud.play() : aud.pause();
      aud.addEventListener('playing',()=> disc.style.animationPlayState = 'running');
      aud.addEventListener('pause',()=> disc.style.animationPlayState = 'paused');

      canv.onclick = function(event) {
                let x = event.offsetX || event.layerX, y = event.offsetY || event.layerY;
                createParticle(x, y);
      }

      function createParticle(x, y) {
                let count = 100, radius = 10;
                for (let j = 0; j < count; j ++) {
                        let p = {};
                        let angle = 360 / count * j, radian = Math.PI / 180 * angle;
                        p.radius = radius;
                        p.startX = x;
                        p.startY = y;
                        p.radian = radian;
                        p.rgb = `${num(0,255)},${num(0,255)},${num(0,255)},`;
                        p.alpha = (Math.floor(Math.random() * 101)) / 100;
                        p.speed = (Math.random() * 5) + 0.4;
                        p.radius = p.speed;
                        particles.push(p);
                }
      }

      function drawParticle() {
                ctx.fillStyle = 'transparent';
                ctx.fillRect(0, 0, w, h);
                for (let j = 0; j < particles.length; j++) {
                        let p = particles;
                        let resultX = Math.cos(p.radian) * p.radius;
                        let resultY = Math.sin(p.radian) * p.radius + 0.4;
                        p.startX += resultX;
                        p.startY += resultY;
                        p.radius *= 1 - p.speed / 100;
                        p.alpha -= 0.005;
                        if (p.alpha <= 0) {
                              particles.splice(j, 1);
                              continue;
                        }
                        ctx.beginPath();
                        ctx.arc(p.startX, p.startY, 1, 0, 360, false);
                        ctx.closePath();
                        ctx.fillStyle = 'rgba(' + p.rgb + p.alpha + ')';
                        ctx.fill();
                }
      }

      function fade() {
                ctx.globalCompositeOperation = 'destination-out';
                ctx.fillStyle = 'rgba(0, 0, 0, .1)';
                ctx.fillRect(0, 0, w, h);
                ctx.globalCompositeOperation = 'lighter';
      }

      function render() {
                idx ++;
                fade();
                drawParticle();
                if(idx > 280) {
                        createParticle(Math.random() * w, Math.random() * h/2);
                        idx = 0;
                }
                requestAnimationFrame(render);
      }

      render();
})();
</script>

马黑黑 发表于 2023-1-26 19:24

未阳的都寂寞

绿叶清舟 发表于 2023-1-26 19:46

马黑黑 发表于 2023-1-26 19:24
未阳的都寂寞

就是啊,想想还是阳一下算了

红影 发表于 2023-1-26 20:08

这首歌像是在耳边絮絮耳语。这点随机烟火太漂亮了。欣赏清舟好帖{:4_199:}

马黑黑 发表于 2023-1-26 20:08

绿叶清舟 发表于 2023-1-26 19:46
就是啊,想想还是阳一下算了

你现在想阳还阳不了

红影 发表于 2023-1-26 20:10

都忘了怎么玩这个烟火的代码了。对了,歌词呢?清舟偷懒了吧{:4_189:}

红影 发表于 2023-1-26 20:11

别学会享受寂寞了。有同城的我在,什么时候说涮个锅马上就走呗{:4_172:}

红影 发表于 2023-1-26 20:13

这个歌第一次听,不知为什么就特别合心,。好像很多人有这样寂寞的时候吧。

雨中悄然 发表于 2023-1-26 20:35

代码高手在这里,又有贴子可以学了。左下角的字很有设计感,喜欢。{:4_199:}

樵歌 发表于 2023-1-26 20:49

这图这小女孩不食人间烟火,合该寂寞{:4_173:}

梦油 发表于 2023-1-26 21:12

瞧这姑娘是很寂寞。

绿叶清舟 发表于 2023-1-26 21:18

梦油 发表于 2023-1-26 21:12
瞧这姑娘是很寂寞。

没有烟火放啊{:4_173:}

绿叶清舟 发表于 2023-1-26 21:18

樵歌 发表于 2023-1-26 20:49
这图这小女孩不食人间烟火,合该寂寞

要不要送点酒去{:4_189:}

绿叶清舟 发表于 2023-1-26 21:19

雨中悄然 发表于 2023-1-26 20:35
代码高手在这里,又有贴子可以学了。左下角的字很有设计感,喜欢。

代码放到上面贴子里了,都是马那里套出来的

绿叶清舟 发表于 2023-1-26 21:20

红影 发表于 2023-1-26 20:13
这个歌第一次听,不知为什么就特别合心,。好像很多人有这样寂寞的时候吧。

好象也是今年春晚上的歌了

绿叶清舟 发表于 2023-1-26 21:20

红影 发表于 2023-1-26 20:10
都忘了怎么玩这个烟火的代码了。对了,歌词呢?清舟偷懒了吧

最怕歌词了{:4_189:}

绿叶清舟 发表于 2023-1-26 21:21

红影 发表于 2023-1-26 20:11
别学会享受寂寞了。有同城的我在,什么时候说涮个锅马上就走呗

好啊{:4_189:}

绿叶清舟 发表于 2023-1-26 21:22

马黑黑 发表于 2023-1-26 20:08
你现在想阳还阳不了

不会吧,只是不报而已了

马黑黑 发表于 2023-1-26 22:36

绿叶清舟 发表于 2023-1-26 21:22
不会吧,只是不报而已了

没法阳,不信你试试

红影 发表于 2023-1-26 23:00

绿叶清舟 发表于 2023-1-26 21:20
好象也是今年春晚上的歌了

春晚没看,还真不知道呢:)
页: [1] 2 3 4
查看完整版本: 寂寞烟火