HTML5 Canvas绘制银河系特效(鼠标点击拖动一下看效果)

代码语言:html

所属分类:粒子

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

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>HTML5 Canvas绘制银河系特效</title>

<style>
body
{
       
margin:0;
}
canvas
{
       
position:absolute;
       
top:0;
       
left:0;
       
width:100%;
       
height:100%;
}
</style>

</head>
<body>

<script type="text/javascript">
    var w = window.innerWidth;
        var h = window.innerHeight;

        var dustCanvas = document.createElement('canvas');
        var dustCtx = dustCanvas.getContext('2d');
        var starCanvas = document.createElement('canvas');
        var starCtx = starCanvas.getContext('2d');

        document.body.appendChild(dustCanvas);
        document.body.appendChild(starCanvas);

        dustCanvas.width = starCanvas.width = w;
        dustCanvas.height = starCanvas.height = h;

        dustCtx.globalCompositeOperation = 'lighter';
        starCtx.globalCompositeOperation = 'lighter';

        var galaxies = [];

        var mouse = {
          pos: {
                x: w * 0.5,
                y: h * 0.5
          },
          speed: 0
        };

        var randomNumbers = length => Array.from(new Array(length), () => Math.random());
        var PI = Math.PI;
        var TAU = PI * 2;
        var r = () => Math.random();
        var angle2 = (p1,p2) => Math.atan2(
          p2[1]-p1[1],
          p2[0]-p1[0]
        );
        var distance2 = (p1,p2) => Math.sqrt(
          Math.pow(p1[0]-p2[0], 2) +
          Math.pow(p1[1]-p2[1], 2)
        );

        var createDustParticle = (color) => {
         
          var canvas = document.createElement('canvas');
         
          var w = 100;
          var h = 100;
          var cx = w * 0.5;
          var cy = h * 0.5;
         
          canvas.width = w;
          canvas.height = h;
          var ctx = canvas.getContext('2d');
          canvas.ctx = ctx;
         
          var xRand = -5 + (r()*10);
          var yRand = -5 + (r()*10);
          var xRand2 = 10 + (r()*(cx/2));
          var yRand2 = 10 + (r()*(cy/2));
         
          var color = color || {
                r: Math.round(150+(r()*100)),
                g: Math.round(50+(r()*100)),
                b: Math.round(50+(r()*100))
          };
         
          ctx.fillStyle = `rgba(${color.r},${color.g},${color.b},.02)`;
         
          Array
                .from(new Array(200), () => randomNumbers(3))
                .forEach( (p,i,arr) => {
                  var length = arr.length;
                 
                  var x = Math.cos( TAU/xRand/length*i ) * p[2]*xRand2 + cx;
                  var y = Math.sin( TAU/yRand/length*i ) * p[2]*yRand2 + cy;
                 
                  ctx.beginPath();
                  ctx.moveTo(x, y);
                  ctx.arc(x, y, p[2]*4, 0, TAU);
                  ctx.fill();
               
                });
         
                return.........完整代码请登录后点击上方下载按钮下载查看

网友评论0