benshepherd icon

Snow particles

benshepherd | PRO | 06/23/13 11:43:32 AM UTC | 0 ⭐ | 509 👁️ | Never ⏰ | []
JavaScript |

3.77 KB

|

None

|

0 👍

/

0 👎

 
<html>
    <head>
        <title>HTML5 Canvas</title>
        <style>
            
            * { padding:0; margin:0; }
            body { overflow:hidden; }
            
        </style>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
        <script>
            
            $(function() {
                
               var canvas = document.getElementById("canvas");
               var ctx = canvas.getContext("2d");
               
               var W = $(document).width();
               var H = $(document).height();
               
               canvas.width = W;
               canvas.height = H;
               
               var parts = [];
               var dir_x = ranInt(-10,10);
               
               function Rain() {
                   this.x = ranInt(0,W);
                   this.y = 0;
                   this.s = ranInt(5,10);
                   this.c = "rgba(255,255,255,1)";
                   this.sx = 0;
                   this.sy = ranInt(2,4) * ranInt(1,10);
               }
               
               function Draw() {
                   
                   ctx.globalCompositeOperation = "source-over";
                   ctx.fillStyle = "rgba(0,0,0,1)";
                   ctx.fillRect(0,0,W,H);
                   ctx.globalCompositeOperation = "lighter";
                   
                   for(var i = 0; i < parts.length; i++) {
                       
                       var p = parts[i];
                       
                       //draw particle
                       ctx.beginPath();
                       ctx.arc(p.x, p.y, p.s, 0, Math.PI * 2);
                       ctx.fillStyle = p.c;
                       ctx.fill();
                       
                       //update particle
                       parts[i].x += dir_x;
                       parts[i].y += p.sy;
                       
                       if(p.y > H - p.s || p.x > W - p.s || p.x < 0) {
                           console.log(i + " is over the border, removing index");
                           parts[i] = new Rain();
                       } 
                       
                   }
                   
                   /* debug purposes */
                   ctx.fillStyle = "rgba(255,255,255,1)";
                   ctx.font = "24px Arial";
                   var debug = [
                       "parts.length: " + parts.length,
                       "dir_x: " + dir_x
                       ];
                   var h = 40;
                   for(i = 0; i < debug.length; i++) {
                       ctx.fillText(debug[i], 20, h*(i+1));
                   }
                   
               }
               
               function CreateParticle() {
                   
                   if(parts.length != 100)
                   parts.push(new Rain());
                   
               }
               
               setInterval(Draw, 33);
               setInterval(CreateParticle, 100);
               setInterval(function() {
                   
                   dir_x += ranInt(-2,2);
                   
                   if(dir_x > 10) {
                       dir_x -= ranInt(3,7);
                   }
                   if(dir_x < -10) {
                       dir_x += ranInt(3,7)
                   }
                   
               }, 500);
               
               
               /* Other important functions */
               function ranInt(Min, Max) {
                   return Math.floor(Math.random() * (Max-Min) + Min);
               }
            });
            
        </script>
        
    </head>
    
    <body>
        <canvas id="canvas"></canvas>
    </body>
</html>

Comments