02/17
2015
之前我已经搜集了两种雪花飘落的效果:
第一种 雪花会飘满整个网页长度,占用资源严重,不推荐使用
第二种 雪花只飘满网页当前可视区域,即只会覆盖在当前一屏上,不太占资源。
这次找到的第三种,原理和第二种类似,代码如下:
<script> var snow = function() { if(1==1) { $("body").append('<canvas id="christmasCanvas" style="top: 0px; left: 0px; z-index: 5000; position: fixed; pointer-events: none;"></canvas>'); var b = document.getElementById("christmasCanvas"), a = b.getContext("2d"), d = window.innerWidth, c = window.innerHeight; b.width = d; b.height = c; for(var e = [], b = 0;b < 70;b++) { e.push({x:Math.random() * d, y:Math.random() * c, r:Math.random() * 4 + 1, d:Math.random() * 70}) } var h = 0; window.intervral4Christmas = setInterval(function() { a.clearRect(0, 0, d, c); a.fillStyle = "rgba(255, 255, 255, 0.6)"; a.shadowBlur = 5; a.shadowColor = "rgba(255, 255, 255, 0.9)"; a.beginPath(); for(var b = 0;b < 70;b++) { var f = e[b]; a.moveTo(f.x, f.y); a.arc(f.x, f.y, f.r, 0, Math.PI * 2, !0) } a.fill(); h += 0.01; for(b = 0;b < 70;b++) { if(f = e[b], f.y += Math.cos(h + f.d) + 1 + f.r / 2, f.x += Math.sin(h) * 2, f.x > d + 5 || f.x < -5 || f.y > c) { e[b] = b % 3 > 0 ? {x:Math.random() * d, y:-10, r:f.r, d:f.d} : Math.sin(h) > 0 ? {x:-5, y:Math.random() * c, r:f.r, d:f.d} : {x:d + 5, y:Math.random() * c, r:f.r, d:f.d} } } }, 70) } } snow(); </script>
只是后两种效果看着都不怎么像真的雪花呢