html5中文学习网

您的位置: 首页 > html5教程 > 高级应用 » 正文

基于html5 canvas实现漫天飞雪效果实例_html5教程技巧

[ ] 已经帮助:人解决问题
这篇文章主要为大家介绍了基于html5 canvas实现漫天飞雪效果,讲述了该特效完整的实现过程以及核心代码,具有不错的实用价值,需要的朋友可以参考下

本文实例讲述了基于html5 canvas实现漫天飞雪效果的方法,运行该实例可以看到很棒的下雪效果。如下图所示:w2RHTML5中文学习网 - HTML5先行者学习网

w2RHTML5中文学习网 - HTML5先行者学习网

主要代码如下:w2RHTML5中文学习网 - HTML5先行者学习网


复制代码
代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<a href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</a>">w2RHTML5中文学习网 - HTML5先行者学习网
<html xmlns="<a href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</a>">w2RHTML5中文学习网 - HTML5先行者学习网
<head>w2RHTML5中文学习网 - HTML5先行者学习网
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />w2RHTML5中文学习网 - HTML5先行者学习网
<title>漫天飞雪</title>w2RHTML5中文学习网 - HTML5先行者学习网
<style type="text/css">w2RHTML5中文学习网 - HTML5先行者学习网
* {margin: 0; padding: 0;}</p><p>body {w2RHTML5中文学习网 - HTML5先行者学习网
/*You can use any kind of background here.*/w2RHTML5中文学习网 - HTML5先行者学习网
background: #6b92b9;w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
canvas {w2RHTML5中文学习网 - HTML5先行者学习网
display: block;w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
</style>w2RHTML5中文学习网 - HTML5先行者学习网
</head></p><p><body></p><p><div style=" background:#6b92b9; width:100%; height:2000px;" ></div>w2RHTML5中文学习网 - HTML5先行者学习网
<canvas id="canvas" style="position:fixed; top:0px;left:0px;z-index:80;pointer-events:none;"></canvas></p><p><script>w2RHTML5中文学习网 - HTML5先行者学习网
window.onload = function(){w2RHTML5中文学习网 - HTML5先行者学习网
//canvas initw2RHTML5中文学习网 - HTML5先行者学习网
var canvas = document.getElementById("canvas");w2RHTML5中文学习网 - HTML5先行者学习网
var ctx = canvas.getContext("2d");w2RHTML5中文学习网 - HTML5先行者学习网
w2RHTML5中文学习网 - HTML5先行者学习网
//canvas dimensionsw2RHTML5中文学习网 - HTML5先行者学习网
var W = window.innerWidth;w2RHTML5中文学习网 - HTML5先行者学习网
var H = window.innerHeight;w2RHTML5中文学习网 - HTML5先行者学习网
canvas.width = W;w2RHTML5中文学习网 - HTML5先行者学习网
canvas.height = H;w2RHTML5中文学习网 - HTML5先行者学习网
w2RHTML5中文学习网 - HTML5先行者学习网
//snowflake particlesw2RHTML5中文学习网 - HTML5先行者学习网
var mp = 3000; //max particlesw2RHTML5中文学习网 - HTML5先行者学习网
var particles = [];w2RHTML5中文学习网 - HTML5先行者学习网
for(var i = 0; i < mp; i++)w2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
particles.push({w2RHTML5中文学习网 - HTML5先行者学习网
x: Math.random()*W, //x-coordinatew2RHTML5中文学习网 - HTML5先行者学习网
y: Math.random()*H, //y-coordinatew2RHTML5中文学习网 - HTML5先行者学习网
r: Math.random()*3+1, //radiusw2RHTML5中文学习网 - HTML5先行者学习网
d: Math.random()*mp //densityw2RHTML5中文学习网 - HTML5先行者学习网
})w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
w2RHTML5中文学习网 - HTML5先行者学习网
//Lets draw the flakesw2RHTML5中文学习网 - HTML5先行者学习网
function draw()w2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
ctx.clearRect(0, 0, W, H);w2RHTML5中文学习网 - HTML5先行者学习网
w2RHTML5中文学习网 - HTML5先行者学习网
ctx.fillStyle = "rgba(255, 255, 255, 0.8)";w2RHTML5中文学习网 - HTML5先行者学习网
/* ctx.fillStyle = "#FF0000";*/w2RHTML5中文学习网 - HTML5先行者学习网
ctx.beginPath();w2RHTML5中文学习网 - HTML5先行者学习网
for(var i = 0; i < mp; i++)w2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
var p = particles[i];w2RHTML5中文学习网 - HTML5先行者学习网
ctx.moveTo(p.x, p.y);w2RHTML5中文学习网 - HTML5先行者学习网
ctx.arc(p.x, p.y, p.r, 0, Math.PI*2, true);w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
ctx.fill();w2RHTML5中文学习网 - HTML5先行者学习网
update();w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
w2RHTML5中文学习网 - HTML5先行者学习网
//Function to move the snowflakesw2RHTML5中文学习网 - HTML5先行者学习网
//angle will be an ongoing incremental flag. Sin and Cos functions will be applied to it to create vertical and horizontal movements of the flakesw2RHTML5中文学习网 - HTML5先行者学习网
var angle = 0;w2RHTML5中文学习网 - HTML5先行者学习网
function update()w2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
angle += 0.01;w2RHTML5中文学习网 - HTML5先行者学习网
for(var i = 0; i < mp; i++)w2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
var p = particles[i];w2RHTML5中文学习网 - HTML5先行者学习网
//Updating X and Y coordinatesw2RHTML5中文学习网 - HTML5先行者学习网
//We will add 1 to the cos function to prevent negative values which will lead flakes to move upwardsw2RHTML5中文学习网 - HTML5先行者学习网
//Every particle has its own density which can be used to make the downward movement different for each flakew2RHTML5中文学习网 - HTML5先行者学习网
//Lets make it more random by adding in the radiusw2RHTML5中文学习网 - HTML5先行者学习网
p.y += Math.cos(angle+p.d) + 1 + p.r/2;w2RHTML5中文学习网 - HTML5先行者学习网
p.x += Math.sin(angle) * 2;w2RHTML5中文学习网 - HTML5先行者学习网
w2RHTML5中文学习网 - HTML5先行者学习网
//Sending flakes back from the top when it exitsw2RHTML5中文学习网 - HTML5先行者学习网
//Lets make it a bit more organic and let flakes enter from the left and right also.w2RHTML5中文学习网 - HTML5先行者学习网
if(p.x > W || p.x < 0 || p.y > H)w2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
if(i%3 > 0) //66.67% of the flakesw2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
particles[i] = {x: Math.random()*W, y: -10, r: p.r, d: p.d};w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
elsew2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
//If the flake is exitting from the rightw2RHTML5中文学习网 - HTML5先行者学习网
if(Math.sin(angle) > 0)w2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
//Enter fromthw2RHTML5中文学习网 - HTML5先行者学习网
particles[i] = {x: -5, y: Math.random()*H, r: p.r, d: p.d};w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
elsew2RHTML5中文学习网 - HTML5先行者学习网
{w2RHTML5中文学习网 - HTML5先行者学习网
//Enter from the rightw2RHTML5中文学习网 - HTML5先行者学习网
particles[i] = {x: W+5, y: Math.random()*H, r: p.r, d: p.d};w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
w2RHTML5中文学习网 - HTML5先行者学习网
//animation loopw2RHTML5中文学习网 - HTML5先行者学习网
setInterval(draw, 15);w2RHTML5中文学习网 - HTML5先行者学习网
}w2RHTML5中文学习网 - HTML5先行者学习网
</script>w2RHTML5中文学习网 - HTML5先行者学习网
</body>w2RHTML5中文学习网 - HTML5先行者学习网
</html>
w2RHTML5中文学习网 - HTML5先行者学习网

代码分析如下:w2RHTML5中文学习网 - HTML5先行者学习网

这行代码改变雪花半径大小:w2RHTML5中文学习网 - HTML5先行者学习网


复制代码
代码如下:
r: Math.random()*3+1, //radius
w2RHTML5中文学习网 - HTML5先行者学习网

这行代码改变雪花下落速度:w2RHTML5中文学习网 - HTML5先行者学习网


复制代码
代码如下:
setInterval(draw, 15);
w2RHTML5中文学习网 - HTML5先行者学习网

这行值改变雪花密度:w2RHTML5中文学习网 - HTML5先行者学习网


复制代码
代码如下:
var mp = 3000; //max particles
w2RHTML5中文学习网 - HTML5先行者学习网

相信本文所述对大家的html5 WEB程序设计有一定的借鉴价值。w2RHTML5中文学习网 - HTML5先行者学习网

(责任编辑:)
推荐书籍
推荐资讯
关于HTML5先行者 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助