原生js+canvas實(shí)現(xiàn)下雪效果
本文實(shí)例為大家分享了js+canvas實(shí)現(xiàn)下雪效果的具體代碼,供大家參考,具體內(nèi)容如下
效果展示:

源碼展示:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>canvas下雪效果(原生js)</title>
<style>
* {
margin: 0;
padding: 0
}
html, body {
width: 100%;
height: 100%;
overflow: hidden;
background-color: #222;
}
#canvas {
position: absolute;
top: 0;
left: 0;
}
</style>
</head>
<body>
<canvas id="canvas"></canvas>
<img id="imgSnow" width="0" height="0" src="xh.png" alt="雪花">
<img id="bgSnow" width="100%" height="100%" src="bj.jpg" alt="背景">
<script>
window.onload = function () {
var canvas = document.getElementById("canvas");
var imgSnow = document.getElementById("imgSnow");
var bgSnow = document.getElementById("bgSnow");
var ctx = canvas.getContext('2d');
var mbody = document.querySelector("body");
canvas.width =mbody.offsetWidth;
canvas.height = mbody.offsetHeight;
var GetRandomNum = function (Min, Max) {
var Range = Max - Min;
var Rand = Math.random();
return (Min + Math.round(Rand * Range));
}
// console.log(GetRandomNum(0, canvas.width))
var snowArray = {}; //雪花對(duì)象
var snowIndex = 0; //標(biāo)識(shí)符
var setting = {
num: 30, //數(shù)量
snowSize: 20, //大小
startX: Math.random() * canvas.width, //起始橫坐標(biāo)
startY: 0, //起始縱坐標(biāo)
vy: 0.01
}
function snow() {
// 起始橫坐標(biāo)
this.x = Math.random() * canvas.width;
// 起始縱坐標(biāo)
this.y = setting.startY;
this.size = setting.snowSize + Math.random() * 10 - 10;
//橫坐標(biāo)偏移量
this.vx = Math.random() * 3 - 2; //偏移量
//縱坐標(biāo)偏移量
this.vy = Math.random() * 10;
this.life = 0;
this.maxLife = 100;
this.id = snowIndex;
//當(dāng)前信息保存至對(duì)象snowArray
snowArray[snowIndex] = this;
snowIndex++;
}
snow.prototype.draw = function () {
this.x += this.vx;
this.y += this.vy;
this.vy += setting.vy;
this.life++;
//刪除
if (this.y > canvas.height * 0.9 - 20) {
snowArray[this.id]
} else if (this.life >= this.maxLife) {
snowArray[this.id]
}
ctx.drawImage(imgSnow, this.x, this.y, this.size, this.size)
}
setInterval(function () {
ctx.drawImage(bgSnow, 0, 0, canvas.width, canvas.height);
//數(shù)
for (var i = 0; i < setting.num; i++) {
if (Math.random() > 0.97) {
new snow();
}
}
for (var i in snowArray) {
snowArray[i].draw();
}
}, 100)202082104246954
}
</script>
</body>
</html>
圖片:

雪花:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript function函數(shù)種類(lèi)詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript function函數(shù)種類(lèi),包括普通函數(shù)、匿名函數(shù)、閉包函數(shù),感興趣的小伙伴們可以參考一下2016-02-02
JavaScript仿靜態(tài)分頁(yè)實(shí)現(xiàn)方法
這篇文章主要介紹了JavaScript仿靜態(tài)分頁(yè)實(shí)現(xiàn)方法,可實(shí)現(xiàn)模擬靜態(tài)效果的分頁(yè)功能,并且可以控制分頁(yè)的字符數(shù),使用時(shí)可根據(jù)情況進(jìn)行相應(yīng)的字段修改即可,非常靈活實(shí)用,需要的朋友可以參考下2015-08-08
javascript:void(0)是什么意思及href=#與href=javascriptvoid(0)的區(qū)別
Javascript中void是一個(gè)操作符,該操作符指定要計(jì)算一個(gè)表達(dá)式但是不返回值,本文給大家介紹javascript:void(0)是什么意思及href=#與href=javascriptvoid(0)的區(qū)別,需要的朋友參考下2015-11-11
bootstrap Table服務(wù)端處理分頁(yè)(后臺(tái)是.net)
這篇文章主要為大家詳細(xì)介紹了bootstrap Table服務(wù)端處理分頁(yè),后臺(tái)是.net,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
JS實(shí)現(xiàn)購(gòu)物車(chē)特效
本文主要分享了用JavaScript實(shí)現(xiàn)購(gòu)物車(chē)特效的示例代碼。具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
js實(shí)現(xiàn)在文本框光標(biāo)處添加字符的方法介紹
在開(kāi)發(fā)應(yīng)用中,經(jīng)常會(huì)遇到一些技術(shù)上的問(wèn)題,比如:怎樣讓js在文本框光標(biāo)處添加字符,本文將以此問(wèn)題進(jìn)行詳細(xì)介紹,需要了解的朋友可以參考下2012-11-11
圖片連續(xù)滾動(dòng)代碼[兼容IE/firefox]
網(wǎng)上有不少的連續(xù)滾動(dòng)實(shí)現(xiàn)代碼,下面的這個(gè)是兼容性不錯(cuò)的代碼。大家可以測(cè)試下。2009-06-06
JS如何實(shí)現(xiàn)動(dòng)態(tài)添加的元素綁定事件
這篇文章主要介紹了JS如何實(shí)現(xiàn)動(dòng)態(tài)添加的元素綁定事件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
用jquery.sortElements實(shí)現(xiàn)table排序
實(shí)現(xiàn)table排序,網(wǎng)上有很多解決方案,很多都基于jQuery,最后我選擇用sortElements,實(shí)現(xiàn)很簡(jiǎn)單2014-05-05

