原生js+canvas实现下雪效果

本文实例为大家分享了js+canvas实现下雪效果的具体代码,供大家参考,具体内容如下

效果展示:

源码展示:

<!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 = {}; //雪花对象

var snowIndex = 0; //标识符

var setting = {

num: 30, //数量

snowSize: 20, //大小

startX: Math.random() * canvas.width, //起始横坐标

startY: 0, //起始纵坐标

vy: 0.01

}

function snow() {

// 起始横坐标

this.x = Math.random() * canvas.width;

// 起始纵坐标

this.y = setting.startY;

this.size = setting.snowSize + Math.random() * 10 - 10;

//横坐标偏移量

this.vx = Math.random() * 3 - 2; //偏移量

//纵坐标偏移量

this.vy = Math.random() * 10;

this.life = 0;

this.maxLife = 100;

this.id = snowIndex;

//当前信息保存至对象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);

//数

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>

图片:

雪花:

以上是 原生js+canvas实现下雪效果 的全部内容, 来源链接: utcz.com/z/356727.html

回到顶部