canvas粒子反射游动动画效果

代码语言:html

所属分类:粒子

代码描述:canvas粒子反射游动动画效果,无需依赖第三方库

代码标签: 游动 动画 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">

<style>
body {
    margin: 0;
    overflow: hidden;
    background-color:black
}
</style>

</head>
<body translate="no">
<canvas id="canvas" > </canvas>

<script>
let w,h,particles,
ctx = canvas.getContext('2d');

resize();
init();
requestAnimationFrame(draw);
addEventListener('resize', resize);
addEventListener('click', init);

function init() {
  ctx.clearRect(0, 0, w, h);
  particles = Array(h / 10 | 0).
  fill(0).
  map((e, i) => newParticle());
}

function draw(t) {
  requestAnimationFrame(draw);

  if (particles.length > 3000)
  return;

  t /= 1000;

  particles.forEach(p => {
    p.cooldown -= 0.1;

    // if (Math.random()>0.99){
    //    p.dx = Math.random()*2-1
    //     p.dy = Math.random()*2-1
    // }  
    p.x += p.dx;
    p.y += p.dy;
    if (Math.abs(p.x) > w / 2) {
      p.x = -p.x;
      p.y = -Math.sign(p.y) * Math.abs(p.y);
      p.dy = -Math.sign(p.dy) * Math.abs(p.dy);
    }
    if (Math.abs(p.y) > h / 2)
    p.y = -p.y;
    if (!p.fill)
    p.fill = `hsl(${p.color},55%,55%)`;
    ctx.fillStyle = p.fill;
    ctx.fillRect(w / 2 + p.x - 1, h / 2 + p.y - 1.........完整代码请登录后点击上方下载按钮下载查看

网友评论0