久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

h5canvas實現雪花飄落的特效代碼

這篇文章主要為大家詳細介紹了HTML5 canvas實現雪花飄落特效,效果實現引人入勝,很逼真的動畫效果,感興趣的小伙伴們可以參考一下

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

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

最終效果圖如下:

h5canvas實現雪花飄落的特效代碼

圖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復制內容到剪貼板

<canvas id="mycanvas">      您的瀏覽器不支持canvas畫布     </canvas>

CSS代碼:

CSS Code復制內容到剪貼板

* {         margin: 0;         padding: 0;     }     #mycanvas {         background: black;     }

此時效果如如下:

h5canvas實現雪花飄落的特效代碼

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

2、畫布滿屏顯示

JavaScript代碼如下:

JavaScript Code復制內容到剪貼板

//獲取mycanvas畫布         var can = document.getElementById("mycanvas");         var ctx = can.getContext("2d");         //畫布寬度         var wid = window.innerWidth;         //畫布高度         var hei = window.innerHeight;         can.width=wid;         can.height=hei;

此時效果如如下:

h5canvas實現雪花飄落的特效代碼

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復制內容到剪貼板

//雪花數目     var snow = 100;     //雪花坐標、半徑     var arr = []; //保存各圓坐標及半徑     for (var i = 0; i < snow; i++) {     arr.push({     x: Math.random() * wid,     y: Math.random() * hei,     r: Math.random() * 10 + 1     })     }

4、繪制雪花

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

JavaScript代碼如下:

JavaScript Code復制內容到剪貼板

//畫雪花     function DrawSnow() {         ctx.fillStyle="white";         ctx.beginPath();         for (var i = 0; i < snow; i++) {             var p = arr[i];             ctx.moveTo(p.x,p.y);             ctx.arc(p.x,p.y,p.r,0,2*Math.PI,false);         }         ctx.fill();             ctx.closePath();

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

h5canvas實現雪花飄落的特效代碼

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

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

5、雪花飄動

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

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

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

該函數代碼如下:

JavaScript Code復制內容到剪貼板

//雪花飄落     function SnowFall() {         for (var i = 0; i < snow; i++) {             var p = arr[i];             p.y += Math.random() * 2 + 1;             if (p.y > hei) {                 p.y = 0;             }             p.x += Math.random() * 2 + 1;             if (p.x > wid) {                 p.x = 0;         <span style="white-space:pre">    </span>}         }     }

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

此時DrawSnow函數定義如下:

JavaScript Code復制內容到剪貼板

//畫雪花     function DrawSnow() {         ctx.clearRect(0, 0, wid, hei);         ctx.fillStyle = "white";         ctx.beginPath();         for (var i = 0; i < snow; i++) {             var p = arr[i];             ctx.moveTo(p.x, p.y);             ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);         }         ctx.fill();         SnowFall();         ctx.closePath();     }

最后執行setInterval(DrawSnow, 50);

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

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

XML/HTML Code復制內容到剪貼板

<!DOCTYPE html>    <html>        <head>            <meta charset="utf-8" />            <title></title>            <script src="js/jquery-1.8.3.min.js"></script>            <style type="text/css">                * {                     margin: 0;                     padding: 0;                 }                                  #mycanvas {                     background: black;                 }             </style>        </head>            <body>            <canvas id="mycanvas">                您的瀏覽器不支持canvas畫布             </canvas>            <script>                //獲取mycanvas畫布                 var can = document.getElementById("mycanvas");                 var ctx = can.getContext("2d");                 //畫布寬度                 var wid = window.innerWidth;                 //畫布高度                 var hei = window.innerHeight;                 can.width = wid;                 can.height = hei;                 //雪花數目                 var snow = 100;                 //雪花坐標、半徑                 var arr = []; //保存各圓坐標及半徑                 for (var i = 0; i < snow; i++) {                     arr.push({                         x: Math.random() * wid,                         y: Math.random() * hei,                         r: Math.random() * 10 + 1                     })                 }                 //畫雪花                 function DrawSnow() {                     ctx.clearRect(0, 0, wid, hei);                     ctx.fillStyle = "white";                     ctx.beginPath();                     for (var i = 0; i < snow; i++) {                         var p = arr[i];                         ctx.moveTo(p.x, p.y);                         ctx.arc(p.x, p.y, p.r, 0, 2 * Math.PI, false);                     }                     ctx.fill();                     SnowFall();                     ctx.closePath();                 }                 //雪花飄落                 function SnowFall() {                     for (var i = 0; i < snow; i++) {                         var p = arr[i];                         p.y += Math.random() * 2 + 1;                         if (p.y > hei) {                             p.y = 0;                         }                         p.x += Math.random() * 2 + 1;                         if (p.x > wid) {                             p.x = 0;                         }                     }                 }                 setInterval(DrawSnow, 50);             </script>        </body>        </html>

【相關推薦】

1. 特別推薦:“php程序員工具箱”V0.1版本下載

2. h5 Canvas中Fill 與Stroke文字效果實現實例

3. 分享用canvas實現水流和水池動畫的代碼

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日韩欧美一区二区三区在线观看| 久久国产精品久久w女人spa| 欧美另类中文字幕| 91成人在线网站| 欧美aⅴ一区二区三区视频| 卡一精品卡二卡三网站乱码| 国产伦精品一区二区三区在线播放| 国产精品传媒麻豆hd| www.九色在线| 亚洲一区日本| 国产欧美久久一区二区三区| 美女国产精品久久久| 色在线视频观看| 最新国产拍偷乱拍精品| 18国产精品| 日本美女一区| 免费在线观看视频一区| 国产精品欧美大片| 日韩精品第一区| 蜜桃av一区| 欧美激情福利| 深夜福利视频一区二区| 国产精品视区| 欧美激情在线精品一区二区三区| 欧洲一区二区三区精品| 亚洲精一区二区三区| 精品国产aⅴ| 九九久久电影| 性一交一乱一区二区洋洋av| 免费亚洲一区| 久久天堂成人| 欧美日韩亚洲一区二区三区在线| 国产一区二区三区四区五区| 亚洲一区二区三区高清不卡| 国产精品亚洲欧美日韩一区在线| 久久电影tv| 日韩精品一二三四| 精品视频99| 亚洲免费专区| 99视频精品全部免费在线视频| 日韩美女国产精品| 亚洲成av在线| 国产精品成人国产| 日韩精品一级中文字幕精品视频免费观看 | 免费看日韩精品| 国产aa精品| 亚洲日本欧美| 中文字幕一区二区三区日韩精品| 亚洲精品一二| 日韩久久一区二区三区| 日韩国产高清在线| 狠狠色狠狠色综合日日tαg| 久久亚洲黄色| 青草av.久久免费一区| 一区二区自拍| 丝袜av一区| 精品中国亚洲| 久久精品99国产国产精| 国产手机视频一区二区 | 国产一区二区亚洲| 亚洲久久在线| 在线亚洲欧美| 日本韩国欧美超级黄在线观看| 国产精品欧美大片| 日本va欧美va欧美va精品| aa亚洲婷婷| 国产中文一区| 首页国产精品| 开心激情综合| 国产精品第十页| 国产精品亲子伦av一区二区三区| 亚洲日本三级| 老鸭窝亚洲一区二区三区| 亚洲国产影院| 超级白嫩亚洲国产第一| 麻豆精品在线视频| 97精品国产福利一区二区三区| 美女视频黄久久| 免费观看亚洲天堂| 国产精品白丝久久av网站| 日韩久久一区| 欧美日韩亚洲国产精品| 只有精品亚洲| 蜜桃精品在线| 日本精品黄色| 久久精品网址| 欧美日韩亚洲一区在线观看| 亚洲乱码一区| 日韩国产成人精品| 91精品国产自产观看在线| 亚洲精品裸体| 日韩高清电影一区| 欧美日韩 国产精品| 欧美在线日韩| 国产精品a级| 国产精品麻豆久久| 日韩国产综合| 久久人人88| 尤物精品在线| 亚洲午夜免费| 日本天堂一区| 麻豆91精品视频| 免费亚洲一区| sm久久捆绑调教精品一区| 日韩av一级| 日韩午夜在线| 日本在线视频一区二区| 国产精品一区二区三区美女 | 亚洲精选成人| 日韩美女国产精品| 国产精品一区三区在线观看| 精品五月天堂| 欧美高清一区| 亚洲精品三级| 国产videos久久| 九一国产精品| 日韩高清电影一区| 国内不卡的一区二区三区中文字幕| 日韩大片在线播放| 欧美专区18| 久久99久久人婷婷精品综合| 色综合www| 视频一区中文字幕国产| 国产乱码精品一区二区三区四区 | 色狠狠一区二区三区| 国产精品欧美日韩一区| 日韩精品dvd| 男女性色大片免费观看一区二区| 久久国产麻豆精品| 久久久9色精品国产一区二区三区| 视频一区中文字幕国产| 久久天堂影院| 国产一区二区精品| 欧美国产先锋| 中国女人久久久| 美腿丝袜亚洲一区| 亚洲激情不卡| 国产精品欧美在线观看| 欧美一级精品| 清纯唯美亚洲综合一区| 日韩免费福利视频| 日日摸夜夜添夜夜添国产精品| 丁香婷婷久久| 综合亚洲色图| 久久精品不卡| 国产亚洲字幕| 亚洲女同一区| 精品五月天堂| 综合视频一区| 91精品国产成人观看| 国产午夜久久av| 亚洲电影在线一区二区三区| 青青草91视频| 99re国产精品| 欧美日韩国产观看视频| 69堂免费精品视频在线播放| 亚洲一区激情| 久久av网址| 日韩成人一级| 另类专区亚洲| 国产日产高清欧美一区二区三区 | 日韩激情网站| 免费污视频在线一区| 国产伦理久久久久久妇女| 亚洲深爱激情| 久久精品色播| 国产日韩一区二区三免费高清| 黄色免费成人| 日韩影院二区| 国产精品videossex久久发布 | 亚洲欧洲日韩| 午夜国产一区二区| 丰满少妇一区| 国产精品极品在线观看| 宅男噜噜噜66国产日韩在线观看| 久久三级中文| 国产精品最新| 综合欧美亚洲| 丝袜美腿一区二区三区| 精品在线播放| 水蜜桃久久夜色精品一区| 麻豆亚洲精品| 亚洲伦乱视频| 日韩成人免费| 精品视频国内| 精品一区二区三区视频在线播放| 欧美日韩午夜电影网| 日韩欧美激情电影| 中文字幕成人| 黄色亚洲大片免费在线观看| 久久国产直播| 久久国产主播| 激情久久中文字幕| 97精品中文字幕| 成人美女视频| 久久婷婷久久| japanese国产精品| 欧美日韩日本国产亚洲在线| 最新日韩欧美| 男人的天堂久久精品|