日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

手机html5雪花飘落,如何使用HTML5canvas实现雪花飘落

發布時間:2024/7/23 HTML 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 手机html5雪花飘落,如何使用HTML5canvas实现雪花飘落 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

看到網上很多展示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代碼:

您的瀏覽器不支持canvas畫布

CSS代碼:* {

margin: 0;

padding: 0;

}

#mycanvas {

background: black;

}

此時效果如如下:

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

2、畫布滿屏顯示

JavaScript代碼如下://獲取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;

此時效果如如下:

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代碼如下://雪花數目

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代碼如下://畫雪花

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()函數,效果如下:

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

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

5、雪花飄動

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

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

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

該函數代碼如下://雪花飄落

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;

}

}

}

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

此時DrawSnow函數定義如下://畫雪花

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,經過我們上述步驟,小伙伴們是否已經對整個過程及技術實現很清晰了。

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

* {

margin: 0;

padding: 0;

}

#mycanvas {

background: black;

}

您的瀏覽器不支持canvas畫布

//獲取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);

好了,今天分享就到這里,希望對大家的學習有所幫助。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

如何在canvas里面基于隨機點繪制一個多邊形

用HTML5

Canvas來繪制三角形和矩形等多邊形的方法

總結

以上是生活随笔為你收集整理的手机html5雪花飘落,如何使用HTML5canvas实现雪花飘落的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久国产精品毛片 | 欧洲精品免费一区二区三区 | 成人午夜高清 | 日韩黄色在线视频 | 天天看片中文字幕 | 中文字幕+乱码+中文 | 黄色网在线免费观看 | www一起操 | 欧美激情一二三区 | 亚洲av日韩精品久久久久久久 | 中文字幕视频免费观看 | 欧美xxxx吸乳| 久久五月天婷婷 | 久久99伊人| 视频一区欧美 | 永久免费黄色片 | 午夜日韩在线 | 国产做爰免费视频观看 | 亚洲五月天综合 | 国产又粗又长又黄的视频 | 成人午夜福利视频 | 在线观看欧美国产 | 国产精品51 | 亚洲精品一区三区三区在线观看 | 久久99网 | 看特级毛片 | 涩涩涩涩涩涩涩涩涩 | 99这里只有精品视频 | 色污网站| 欧美在线观看一区二区三区 | 日韩成年人视频 | 秋霞电影一区二区 | 中文字幕有码无码人妻av蜜桃 | 亚洲第一二区 | 污污内射久久一区二区欧美日韩 | 先锋资源一区二区 | 一本到免费视频 | 18视频在线观看娇喘 | 精品熟女一区二区 | 超碰.com| 嘿咻视频在线观看 | 欧洲精品久久久久毛片完整版 | 免费在线看a | 少妇系列在线观看 | 啪啪日韩 | 玉女心经在线看 | 精品国产九九 | 精品少妇一区二区三区免费观 | 国产素人在线观看 | 国产精品区一区二 | 黄色在线视频网址 | 亚洲三级在线视频 | 欧美色图校园春色 | 宝贝乖h调教灌尿穿环 | 乐播av一区二区三区 | 国产欧美在线一区 | 欲色av | 一区二区三区视频免费在线观看 | 日韩久久一区二区三区 | xxav在线 | av一级久久 | 一级片久久久 | 丁香八月婷婷 | 亚洲在线a| 一级黄色免费大片 | 激情五月深爱五月 | 在线播放少妇奶水过盛 | 先锋影音一区二区三区 | 伊人久久久久久久久久久 | 性久久久久久久久久久久 | 香蕉视频二区 | 尤物videos另类xxxx | 光明影院手机版在线观看免费 | 奇米四色7777| 久久在线视频 | 日不卡| 一区二区三区播放 | 久久视频在线 | 久色成人 | 亚洲成成品网站 | 爱逼综合网 | 色噜噜狠狠一区二区 | 色爽爽爽爽爽爽爽爽 | 91视频免费视频 | 在线天堂中文 | 操操操网站 | 69精品一区二区三区 | 亚洲国产美女视频 | 午夜草逼 | 香蕉爱爱视频 | 日本高清视频网站 | 老司机午夜视频 | 男操女视频免费 | 青草热视频 | 久久网av | 欧美视频在线观看免费 | 色婷婷av一区二区三区四区 | 麻豆传媒在线播放 | 久久精品久久久精品美女 |