您好,登錄后才能下訂單哦!
下雪實例
知識點:
canvas畫布
數組
繪畫函數
效果:
源碼:
------------------------------
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="Generator" content=""> <meta name="Author" content=""> <meta name="Keywords" content=""> <meta name="Description" content=""> <title>下雪</title> <style> *{padding:0;margin:0} html{overflow:hidden} </style> </head> <body> <canvas id="canvas" ></canvas> <audio src="http://dx.sc.chinaz.com/Files/DownLoad/sound1/201210/2178.mp3" autoplay loop/> <audio src="http://dx.sc.chinaz.com/Files/DownLoad/sound1/201205/1430.mp3" autoplay loop/> <script type="text/javascript"> window.onload = function(){ //獲取畫布對象 var canvas = document.getElementById("canvas"); //獲取畫布的上下文 var context =canvas.getContext("2d"); //獲取瀏覽器屏幕的寬度和高度 var w = window.innerWidth; var h = window.innerHeight; //設置canvas的寬度和高度 canvas.width = w; canvas.height = h; //1:如何產生雪花,一個圓 ,arc(x,y,r,start,end) //初始化雪花數量 var num = 200; //雪花數組 var snows = []; for(var i=0;i<num;i++){ //x,y圓心掉的坐標位置,r代表圓的半徑,d每個圓的每個圓之間的間距,c代表的顏色 var r = randColor(); snows.push({ x:Math.random()*w, y:Math.random()*h, r:Math.random()*10, d:Math.random()*num }); }; //繪畫的函數 function draw(){ context.clearRect(0,0,w,h); context.beginPath(); for(var i=0;i<num;i++){ var snow = snows[i]; context.fillStyle = "rgba(255,255,255,0.9)"; context.moveTo(snow.x,snow.y); context.arc(snow.x,snow.y,snow.r,0,Math.PI*2); } context.fill(); //掉落 drop(); }; var angle = 0; function drop() { angle += 0.01; for(var i = 0; i < num; i++){ var p = snows[i]; //記住兩個公式:Math.sin(弧度)返回是一個0 1 -1 的數字 //math.cos(1 0 -1 ) 自由體, p.y += Math.cos(angle+p.d) + 1 + p.r*0.625; p.x += Math.sin(angle) * 8 ; //如果雪花到了邊界,進行邊界處理 if(p.x > w+5 || p.x < -5 || p.y > h){ if(i%4 > 0) { snows[i] = {x: Math.random()*w, y: -10, r: p.r, d: p.d}; }else{ //控制方向 if(Math.sin(angle) > 0){ snows[i] = {x: -5, y: Math.random()*h, r: p.r, d: p.d}; }else{ snows[i] = {x: w+5, y: Math.random()*h, r: p.r, d: p.d}; } } } } }; //執行和調用函數 draw(); setInterval(draw,10); //隨機顏色 function randColor(){ var r = Math.floor(Math.random() * 256); var g = Math.floor(Math.random() * 256); var b = Math.floor(Math.random() * 256); return "rgb("+r+","+g+","+b+")"; }; }; </script> </body> </html>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。