婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > HTML5 canvas實現雪花飄落特效

HTML5 canvas實現雪花飄落特效

熱門標簽:濟南辦理400電話 鶴壁手機自動外呼系統怎么安裝 跟電銷機器人做同事 漳州人工外呼系統排名 中紳電銷智能機器人 鄭州電銷外呼系統違法嗎 農村住宅地圖標注 ai電銷機器人連接網關 威海營銷外呼系統招商

看到網上很多展示html5雪花飛動的效果,確實非常引人入勝,我相信大家也跟我一樣看著心動的同時,也很好奇,想研究下代碼如何實現;雖然很多地方也能下載這些源碼,不過也不知道別人制作此類動畫時的思路及難點分析。

我這幾天剛好學習了一下,也趁著此刻有時間從需求分析、知識點、程序編寫一步步給大家解剖下,要是在各位關公面前耍大刀了,可別見笑喲。

最終效果圖如下:

 

圖1

一、需求分析

1、圓形雪花

本示例中雪花形狀使用圓形

2、雪花數量固定

根據圖1仔細觀察白色雪花數量,飄落過程中,整張圖的雪花數量應該是固定的,這個需求是需要通過我們觀察分析所得。這與我們現實生活中看到一幅雪花滿天飛的場景是一致的。

3、雪花大小不一致

每朵雪花它們大小各有不同,也就意味著雪花的半徑是隨機的。這與我們現實生活中看到一幅雪花滿天飛的場景也是一致的。

4、雪花位置在移動

雪花飄落,自然它們的位置也在移動。

二、知識點

1、使用Html5 Canvas+JavaScript畫圓——構成圓形雪花

在Html5中,需要使用Canvas同時借助JavaScript畫圓,以構成圓形雪花——arc(x,y,r,start,stop);

2、隨機數—產生不同半徑、坐標的圓形雪花

本示例中,網頁第一次加載時,需要生成一定數量的不同半徑及位置的雪花,故半徑、坐標為隨機數;雪花在飄落過程中,其半徑不變,坐標在一定幅度內變化,故此時坐標也為隨機數——Math.random() 

三、程序編寫

1、準備工作

放一個畫布canvas,并且設置整個body背景色為黑色

HTML代碼:

XML/HTML Code復制內容到剪貼板
  1. <canvas id="mycanvas">  
  2.     您的瀏覽器不支持canvas畫布   
  3. </canvas>    
  4.   

CSS代碼:

CSS Code復制內容到剪貼板
  1. * {   
  2.     margin: 0;   
  3.     padding: 0;   
  4. }   
  5.                
  6. #mycanvas {   
  7.     backgroundblack;   
  8. }   
  9.   

此時效果如如下:

 

注意:canvas默認是有一個初始化高度和寬度的,所以不用去糾結

2、畫布滿屏顯示

JavaScript代碼如下:

JavaScript Code復制內容到剪貼板
  1. //獲取mycanvas畫布   
  2.     var can = document.getElementById("mycanvas");   
  3.     var ctx = can.getContext("2d");   
  4.     //畫布寬度   
  5.     var wid = window.innerWidth;   
  6.     //畫布高度   
  7.     var hei = window.innerHeight;   
  8.     can.width=wid;   
  9.     can.height=hei;   

此時效果如如下:

3、初始化生成固定數量的雪花

根據我們上述需求分析及知識點解讀,首先雪花的數量是固定的,所以我們需要定義一個變量var snow = 100;這里假設雪花數量為100,;

生成雪花的時候,每個雪花半徑、位置都不同,我們把每個雪花當做一個對象,那么這個對象的屬性就包含:半徑、坐標(X、Y),那么一個雪花對象可以寫成var snowOject={x:1,y:10,r:5},這里就代表一個坐標為(1,10)半徑為5的圓形雪花;本示例中由于半徑和坐標都為隨機數,故使用Math.random()分別為100個雪花生成半徑、坐標(X、Y);

那我們這里是100個雪花,所以為了方便后面操作,就用一個數組保存這100個雪花對象。

JavaScript代碼如下:

JavaScript Code復制內容到剪貼板
  1. //雪花數目   
  2. var snow = 100;   
  3. //雪花坐標、半徑   
  4. var arr = []; //保存各圓坐標及半徑   
  5. for (var i = 0; i < snow; i++) {   
  6. arr.push({   
  7. x: Math.random() * wid,   
  8. y: Math.random() * hei,   
  9. r: Math.random() * 10 + 1   
  10. })   
  11. }   


4、繪制雪花

上面我們已經將100個雪花半徑、坐標(X、Y)生成,下面就是循環使用canvas畫出雪花了(這里就是畫圓),這里定義一個函數

JavaScript代碼如下:

JavaScript Code復制內容到剪貼板
  1. //畫雪花   
  2. function DrawSnow() {   
  3.     ctx.fillStyle="white";   
  4.     ctx.beginPath();   
  5.     for (var i = 0; i < snow; i++) {   
  6.         var p = arr[i];   
  7.         ctx.moveTo(p.x,p.y);   
  8.         ctx.arc(p.x,p.y,p.r,0,2*Math.PI,false);   
  9.     }   
  10.     ctx.fill();   
  11.   
  12.     ctx.closePath();   
  13.   

然后調用 DrawSnow()函數,效果如下:

可以嘗試多次刷新網頁看是否會生成不同大小、位置的雪花(正常情況下是可以的),做到這里就已經接近最終效果了

注意:由于這里需要繪制100個圓,所以每當畫一個圓時重新定義繪制開始坐標即:ctx.moveTo(p.x,p.y);否則會出現異樣效果,不信可以試試呀

 5、雪花飄動

上面我們已經畫出100個雪花,可惜只能依靠刷新網頁才能看到變化效果,但是我們需要實現的是雪花不停的移動位置。

首先我們需要借助setInterval函數不停的重畫雪花,這里間隔時間為50毫秒:setInterval(DrawSnow,50);

同時每一朵雪花的坐標(X、Y)需要不停的改變(在一定幅度內),我們這里的雪花是從左上方飄落到右下方,所以每朵X、Y坐標值都在不停的增大,那我們用一個函數SnowFall()定義雪花飄過規則

該函數代碼如下:

JavaScript Code復制內容到剪貼板
  1. //雪花飄落   
  2. function SnowFall() {   
  3.     for (var i = 0; i < snow; i++) {   
  4.         var p = arr[i];   
  5.         p.y += Math.random() * 2 + 1;   
  6.         if (p.y > hei) {   
  7.             p.y = 0;   
  8.         }   
  9.         p.x += Math.random() * 2 + 1;   
  10.         if (p.x > wid) {   
  11.             p.x = 0;   
  12.     <span style="white-space:pre">    </span>}   
  13.     }   
  14. }  


然后將該函數放入DrawSnow()執行,注意:我們每隔50毫毛重畫雪花,必須擦除畫布,所以DrawSnow()函數體內必須在前面執行clearRect()函數,即:ctx.clearRect(0, 0, wid, hei);

此時DrawSnow函數定義如下:

JavaScript Code復制內容到剪貼板
  1. //畫雪花   
  2. function DrawSnow() {   
  3.     ctx.clearRect(0, 0, wid, hei);   
  4.     ctx.fillStyle = "white";   
  5.     ctx.beginPath();   
  6.     for (var i = 0; i < snow; i++) {   
  7.         var p = arr[i];   
  8.         ctx.moveTo(p.x, p.y);   
  9.         ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);   
  10.     }   
  11.     ctx.fill();   
  12.     SnowFall();   
  13.     ctx.closePath();   
  14. }   

最后執行setInterval(DrawSnow, 50); 

OK,經過我們上述步驟,小伙伴們是否已經對整個過程及技術實現很清晰了。

完整代碼如下(大家可以直接復制到自己項目中執行,測試下效果):

XML/HTML Code復制內容到剪貼板
  1. <!DOCTYPE html>  
  2. <html>  
  3.   
  4.     <head>  
  5.         <meta charset="utf-8" />  
  6.         <title></title>  
  7.         <script src="js/jquery-1.8.3.min.js"></script>  
  8.         <style type="text/css">  
  9.             * {   
  10.                 margin: 0;   
  11.                 padding: 0;   
  12.             }   
  13.                
  14.             #mycanvas {   
  15.                 background: black;   
  16.             }   
  17.         </style>  
  18.     </head>  
  19.   
  20.     <body>  
  21.         <canvas id="mycanvas">  
  22.             您的瀏覽器不支持canvas畫布   
  23.         </canvas>  
  24.         <script>  
  25.             //獲取mycanvas畫布   
  26.             var can = document.getElementById("mycanvas");   
  27.             var ctx = can.getContext("2d");   
  28.             //畫布寬度   
  29.             var wid = window.innerWidth;   
  30.             //畫布高度   
  31.             var hei = window.innerHeight;   
  32.             can.width = wid;   
  33.             can.height = hei;   
  34.             //雪花數目   
  35.             var snow = 100;   
  36.             //雪花坐標、半徑   
  37.             var arr = []; //保存各圓坐標及半徑   
  38.             for (var i = 0; i < snow; i++) {   
  39.                 arr.push({   
  40.                     x: Math.random() * wid,   
  41.                     y: Math.random() * hei,   
  42.                     r: Math.random() * 10 + 1   
  43.                 })   
  44.             }   
  45.             //畫雪花   
  46.             function DrawSnow() {   
  47.                 ctx.clearRect(0, 0, wid, hei);   
  48.                 ctx.fillStyle = "white";   
  49.                 ctx.beginPath();   
  50.                 for (var i = 0; i < snow; i++) {   
  51.                     var p = arr[i];   
  52.                     ctx.moveTo(p.x, p.y);   
  53.                     ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);   
  54.                 }   
  55.                 ctx.fill();   
  56.                 SnowFall();   
  57.                 ctx.closePath();   
  58.             }   
  59.             //雪花飄落   
  60.             function SnowFall() {   
  61.                 for (var i = 0; i < snow; i++) {   
  62.                     var p = arr[i];   
  63.                     p.y += Math.random() * 2 + 1;   
  64.                     if (p.y > hei) {   
  65.                         p.y = 0;   
  66.                     }   
  67.                     p.x += Math.random() * 2 + 1;   
  68.                     if (p.x > wid) {   
  69.                         p.x = 0;   
  70.                     }   
  71.                 }   
  72.             }   
  73.             setInterval(DrawSnow, 50);   
  74.         </script>  
  75.     </body>  
  76.   
  77. </html>  
  78.   

好了,今天分享就到這里,希望對大家的學習有所幫助。
原文:http://www.cnblogs.com/tangyifeng/p/5253629.html

標簽:惠州 營口 咸陽 甘南 萍鄉 紅河 蘇州 文山

巨人網絡通訊聲明:本文標題《HTML5 canvas實現雪花飄落特效》,本文關鍵詞  HTML5,canvas,實現,雪花,飄落,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《HTML5 canvas實現雪花飄落特效》相關的同類信息!
  • 本頁收集關于HTML5 canvas實現雪花飄落特效的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日本不卡不码高清免费观看| 久久亚洲精华国产精华液| 粉嫩13p一区二区三区| 国产综合一区二区| 狠狠色狠狠色综合| 国产福利91精品一区二区三区| 精品写真视频在线观看| 国产精品99久久久久| 成人免费不卡视频| 色噜噜久久综合| 欧美日韩精品一区二区| 日韩一区和二区| 久久久另类综合| 一区在线观看免费| 亚洲一区av在线| 日韩精品视频网站| 国产成a人无v码亚洲福利| 成人h精品动漫一区二区三区| av一本久道久久综合久久鬼色| 97久久人人超碰| 欧美精品在线一区二区| 精品成人一区二区三区四区| 中文一区二区完整视频在线观看| 国产精品久久二区二区| 亚洲成a人v欧美综合天堂下载| 青青草精品视频| 成人性生交大合| 欧美精品一卡二卡| 国产欧美日韩视频在线观看| 一片黄亚洲嫩模| 国产综合色产在线精品| 在线观看视频一区二区欧美日韩 | 久久久99精品免费观看不卡| 国产精品欧美精品| 日韩影院精彩在线| 成人va在线观看| 日韩欧美黄色影院| 亚洲欧美自拍偷拍色图| 日韩精品福利网| 91美女片黄在线| 久久久久久免费网| 日欧美一区二区| 91丨porny丨在线| 久久人人爽爽爽人久久久| 亚洲国产精品天堂| 99久久99精品久久久久久| 日韩三级视频在线看| 日韩美女久久久| 国产.欧美.日韩| 日韩午夜电影av| 一区二区三区视频在线观看| 国产精品99久久久久久宅男| 69堂成人精品免费视频| 一区二区三区四区在线| 91久久精品一区二区三| 国产亚洲人成网站| 精品一区二区国语对白| 91麻豆精品国产91久久久久久| 综合欧美亚洲日本| 成人免费电影视频| 中文字幕精品—区二区四季| 精品一区二区三区的国产在线播放| 欧美精品在线观看播放| 亚洲国产aⅴ成人精品无吗| 色欧美乱欧美15图片| 国产精品嫩草久久久久| 粉嫩高潮美女一区二区三区| 久久这里都是精品| 极品少妇一区二区| 久久久久久亚洲综合| 国产大陆a不卡| 久久精品视频免费| 成人禁用看黄a在线| 欧美激情综合在线| 成人高清视频免费观看| 亚洲精品视频一区二区| 在线一区二区三区四区五区 | 国产成人高清视频| 久久精品视频免费| kk眼镜猥琐国模调教系列一区二区| 久久精品一区二区三区不卡| 国产一区二区三区视频在线播放| 久久久三级国产网站| 国产成人亚洲综合a∨婷婷 | 亚洲日本在线看| 91毛片在线观看| 亚洲午夜久久久久久久久电影网 | 国产精品亲子伦对白| 91热门视频在线观看| 一区二区三区鲁丝不卡| 欧美精品在线视频| 国产精品一区二区三区99| 欧美激情在线一区二区| 色婷婷精品久久二区二区蜜臂av| 日韩中文字幕亚洲一区二区va在线 | 亚洲综合久久久| 3d动漫精品啪啪| 国产成人aaa| 亚洲国产精品视频| 国产亚洲人成网站| 在线观看亚洲精品视频| 久久99深爱久久99精品| 中文字幕在线视频一区| 欧美日韩一本到| 夫妻av一区二区| 午夜成人在线视频| 国产女人水真多18毛片18精品视频 | 午夜影院在线观看欧美| 精品少妇一区二区三区| 色婷婷精品久久二区二区蜜臀av| 奇米精品一区二区三区四区| 中文字幕亚洲不卡| 欧美xxxxxxxx| 欧美性生活影院| 国产精品1区二区.| 亚洲国产精品久久久久婷婷884 | 国产精品99久久不卡二区| 亚洲一级不卡视频| 国产网站一区二区三区| 717成人午夜免费福利电影| av不卡在线观看| 国内精品嫩模私拍在线| 亚洲综合丁香婷婷六月香| 国产精品天干天干在观线| 欧美一区二区久久久| 欧美亚洲一区二区三区四区| 成人丝袜18视频在线观看| 精品一区二区三区免费播放| 一区二区日韩av| 亚洲视频一二三| 国产精品国产三级国产三级人妇 | 91精品福利视频| 国产成人av一区| 韩国欧美国产一区| 久99久精品视频免费观看| 亚洲成人手机在线| 亚洲精品高清在线观看| 国产精品久久网站| 久久精品视频一区二区三区| 精品久久99ma| 欧美一区二区精美| 5月丁香婷婷综合| 91精品蜜臀在线一区尤物| 欧美精品自拍偷拍动漫精品| 欧美三级日本三级少妇99| 欧美丝袜自拍制服另类| 在线观看视频91| 欧美日韩www| 欧美一区二区私人影院日本| 337p亚洲精品色噜噜狠狠| 欧美日本韩国一区二区三区视频| 欧美日韩视频一区二区| 欧美日韩国产高清一区二区三区 | 国产ts人妖一区二区| 国产白丝网站精品污在线入口| 国产露脸91国语对白| 国产精品系列在线观看| 成人午夜视频在线| 色婷婷综合久久久久中文一区二区| 91老师国产黑色丝袜在线| 在线免费亚洲电影| 日韩一级二级三级精品视频| 久久婷婷成人综合色| 最新成人av在线| 成人污污视频在线观看| 91免费观看国产| 欧美日韩卡一卡二| 久久人人超碰精品| 国产精品成人午夜| 亚洲综合激情另类小说区| 日韩国产精品大片| 国产综合成人久久大片91| 99精品欧美一区二区三区小说| 色女孩综合影院| 日韩欧美国产三级| 亚洲日本一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 麻豆精品在线视频| thepron国产精品| 日韩欧美你懂的| 亚洲欧美视频在线观看视频| 蜜臀久久99精品久久久久宅男| 国产成人亚洲精品狼色在线| 91福利社在线观看| 国产欧美一区二区三区鸳鸯浴| 一区二区欧美国产| 粉嫩绯色av一区二区在线观看| 欧美丝袜自拍制服另类| 欧美激情一区二区三区四区| 水野朝阳av一区二区三区| 成人动漫一区二区| 日韩欧美国产系列| 亚洲国产精品欧美一二99| 成人午夜免费视频| 日韩欧美一区二区免费| 一区二区三区蜜桃| 99re8在线精品视频免费播放| 精品国产一区二区在线观看| 亚洲成a人v欧美综合天堂下载| 99久久综合精品|