代码
<style>
#mydiv { margin: 20px 0; left: calc(50% - 81px); transform: translateX(-50%); width: fit-content; height: fit-content; overflow: hidden; pointer-events: none; position: relative; }
#mydiv::after { position: absolute; content: url('https://638183.freep.cn/638183/small/f01.png'); left: 20px; top: 20px; mix-blend-mode: multiply; cursor: pointer; pointer-events: auto; animation: rot 6s linear infinite var(--state); }
#canv { positon: absolute; background: #333; border: 1px solid gray; }
@keyframes rot { to { transform: rotate(360deg); } }
</style>
<div id="mydiv">
<audio id="aud" src="https://music.163.com/song/media/outer/url?id=1316295691" autoplay loop></audio>
<canvas id="canv"></canvas>
</div>
<script>
var ctx = canv.getContext('2d');
var img = new Image();
img.crossOrigin = 'anonymous';
img.onload = () => {
ww = canv.width = img.width;
hh = canv.height = img.height;
ctx.drawImage(img, 0, 0);
reDraw(ctx, ctx.getImageData(0,0,ww,hh));
};
img.src = 'https://638183.freep.cn/638183/t24/2/angel.jpg';
var reDraw = (context, data) => {
for(var i = 0; i < data.data.length; i += 4) {
if(i % 60 === 0) data.data[i+3] = 100;
}
ctx.clearRect(0, 0, ww, hh);
context.clearRect(0,0,ww,hh);
context.putImageData(data,0,0);
};
aud.onplaying = aud.onpause = () => mydiv.style.setProperty('--state', aud.paused ? 'paused' : 'running');
mydiv.onclick = () => aud.paused ? aud.play() : aud.pause();
</script>
|