1var IS_SKV8 = typeof document == "undefined"; 2var HAS_PATH = typeof Path2D != "undefined"; 3 4function circlePath(r) { 5 if (HAS_PATH) { 6 var p = new Path2D(); 7 p.arc(0, 0, r, 0, 2*Math.PI); 8 p.closePath(); 9 return p; 10 } else { 11 return null; 12 } 13} 14 15var onDraw = function() { 16 var W = 500; 17 var H = 500; 18 var NumParticles = 100; 19 20 var angle = 0; 21 var ticks = 0; 22 var particles =[]; 23 24 for (var i = 0; i < NumParticles; i++) { 25 particles[i] = { 26 x: Math.floor(Math.random()*W), 27 y: Math.floor(Math.random()*H), 28 r: Math.floor(Math.random()*7+1), 29 path: circlePath(Math.random()*7+1), 30 } 31 } 32 33 function draw(ctx) { 34 ctx.fillStyle = "#ADD8E6"; 35 ctx.fillRect(0, 0, W-1, H-1); 36 ctx.fillStyle = "#FFFFFF"; 37 38 angle += 0.0039; 39 for (var i = 0; i < particles.length; i++) { 40 var p = particles[i]; 41 p.x += Math.floor(Math.sin(angle)*5.0); 42 p.y += 0.6*p.r; 43 if (p.x > W) { 44 p.x-=W; 45 } 46 if (p.x < 0) { 47 p.x += W; 48 } 49 if(p.y>(H+1)){ 50 p.y = 0; 51 } 52 if (HAS_PATH) { 53 ctx.save(); 54 ctx.translate(p.x, p.y); 55 ctx.fill(p.path); 56 ctx.restore(); 57 } else { 58 ctx.beginPath(); 59 ctx.moveTo(p.x, p.y); 60 ctx.arc(p.x, p.y, p.r, 0, 2*Math.PI, true); 61 ctx.closePath(); 62 ctx.fill(); 63 } 64 }; 65 66 ticks++; 67 if (IS_SKV8) { 68 inval(); 69 } 70 } 71 72 function fps() { 73 console.log(ticks); 74 ticks = 0; 75 setTimeout(fps, 1000); 76 } 77 78 setTimeout(fps, 1000); 79 80 return draw; 81}(); 82 83if (!IS_SKV8) { 84 window.onload = function(){ 85 var canvas = document.getElementById("snow"); 86 var ctx = canvas.getContext("2d"); 87 function drawCallback() { 88 onDraw(ctx); 89 setTimeout(drawCallback, 1); 90 } 91 setTimeout(drawCallback, 1); 92 } 93} 94 95console.log("HAS_PATH: " + HAS_PATH); 96