冬天到了,很多的博客空間都加了雪花的效果,於是去看了看他們的效果實現。有好幾個效果代碼,就拿過來了,有需要的朋友可以拿過去試試看。
雪花大圖片:
效果代碼一
<script type="text/javascript" language="javascript"> (function() { function k(a, b, c) { if (a.addEventListener) a.addEventListener(b, c, false); else a.attachEvent && a.attachEvent("on" + b, c) } function g(a) { if (typeof window.onload != "function") window.onload = a; else { var b = window.onload; window.onload = function() { b(); a() } } } function h() { var a = {}; for (type in { Top: "", Left: "" }) { var b = type == "Top" ? "Y": "X"; if (typeof window["page" + b + "Offset"] != "undefined") a[type.toLowerCase()] = window["page" + b + "Offset"]; else { b = document.documentElement.clientHeight ? document.documentElement: document.body; a[type.toLowerCase()] = b["scroll" + type] } } return a } function l() { var a = document.body, b; if (window.innerHeight) b = window.innerHeight; else if (a.parentElement.clientHeight) b = a.parentElement.clientHeight; else if (a && a.clientHeight) b = a.clientHeight; return b } function i(a) { this.parent = document.body; this.createEl(this.parent, a); this.size = Math.random() * 5 + 5; this.el.style.width = Math.round(this.size) + "px"; this.el.style.height = Math.round(this.size) + "px"; this.maxLeft = document.body.offsetWidth - this.size; this.maxTop = document.body.offsetHeight - this.size; this.left = Math.random() * this.maxLeft; this.top = h().top + 1; this.angle = 1.4 + 0.2 * Math.random(); this.minAngle = 1.4; this.maxAngle = 1.6; this.angleDelta = 0.01 * Math.random(); this.speed = 2 + Math.random() } var j = false; g(function() { j = true }); var f = true; window.createSnow = function(a, b) { if (j) { var c = [], m = setInterval(function() { f && b > c.length && Math.random() < b * 0.0025 && c.push(new i(a)); ! f && !c.length && clearInterval(m); for (var e = h().top, n = l(), d = c.length - 1; d >= 0; d--) if (c[d]) if (c[d].top < e || c[d].top + c[d].size + 1 > e + n) { c[d].remove(); c[d] = null; c.splice(d, 1) } else { c[d].move(); c[d].draw() } }, 40); k(window, "scroll", function() { for (var e = c.length - 1; e >= 0; e--) c[e].draw() }) } else g(function() { createSnow(a, b) }) }; window.removeSnow = function() { f = false }; i.prototype = { createEl: function(a, b) { this.el = document.createElement("img"); this.el.setAttribute ("src", b + "雪花圖片的絕對鏈接地址"); this.el.style.position = "absolute"; this.el.style.display = "block"; this.el.style.zIndex = "99999"; this.parent.appendChild(this.el) }, move: function() { if (this.angle < this.minAngle || this.angle > this.maxAngle) this.angleDelta = -this.angleDelta; this.angle += this.angleDelta; this.left += this.speed * Math.cos(this.angle * Math.PI); this.top -= this.speed * Math.sin(this.angle * Math.PI); if (this.left < 0) this.left = this.maxLeft; else if (this.left > this.maxLeft) this.left = 0 }, draw: function() { this.el.style.top = Math.round(this.top) + "px"; this.el.style.left = Math.round(this.left) + "px" }, remove: function() { this.parent.removeChild(this.el); this.parent = this.el = null } } })(); createSnow("", 40); </script>
將以上面代碼直接復制粘貼到主題中的Header或者Footer文件中,如果你只想讓文章頁面顯示,那就直接添加到single就可以了。 下面把雪花圖片(所需的素材)提供給大家,小圖片: 需要大家上傳到自己的博客的當前使用的主題中,然後把代碼中的鏈接改成圖片所在的位置即可。效果如本頁面所示.
效果代碼二:
<html> <head> <script> function start(){ var array=new Array(); var canvas=document.getElementById("mycanvas"); var context=canvas.getContext("2d"); for(var i=0;i<50;i++){ var Showsnow=new showsnow(); array.push(Showsnow); } time=setInterval(function (){ context.clearRect(0,0,canvas.width,canvas.height); for(var i=0;i<array.length;i++){ array[i].move(); array[i].draw(context); } },500); } function showsnow(){ var y=parseInt(Math.random()*50)*10; var x=parseInt(Math.random()*80)*10; this.draw=function(context){ context.font="50px Calibri"; context.fillText("*",x,y); } this.move=function(){ y+=20; if(y>600){ y=0; } } } </script> </head> <body> <input type="button" value="start" onclick="start()" /> <br/> <canvas id="mycanvas" height="600px" width="600px" style="border: 3px solid blue"></canvas> </body> </html>
這個效果演示如下(感覺比較丑,不推薦):
效果代碼三
其實實現WordPress博客飄落雪花的還可以用 let it snow 插件。
let it snow插件使用方法我就在這裡不唠叨了,和其它插件安裝沒啥區別,可以直接去下載上傳文件夾let it snow裡面的文件到/wp-content/plugins/目錄,然後激活此插件,在WordPress的管理面板菜單設置插件即可。或者在後頭插件庫裡面直接搜索,也可以找到。
let it snow 官方網站:點擊訪問
效果代碼四
在網上看到一個非常強大的SnowStorm插件。和牛逼啊,好像是google上搜let it snow會有下雪以及霜凍效果的代碼,很有創意。覺得好的童鞋可以自己去官網看看。
網上找了一個簡單的隨機的雪花飄落效果代碼分享給大家(這個效果是純代碼寫的。雪花就是*。):
稍微解釋下裡面的幾個函數:
1、letItSnow()
就是下雪啦(這句依舊是廢)。然後就調用createSnow來產生雪花。
2、createSnow()
產生雪花每個雪花都是一個<i>標簽,裡面放一個“*”來模擬雪花(google那個copy不下來,居然顯示為空格,我了個太陽…),然後放到一個大容器叫snowBox裡面,產生的個體push進iArray裡面收集起來。雪花采用的是以snowBox為參照的絕對定位方式,top為0px,left就用Math.random()*window.screen.width,讓雪花隨機在屏幕寬度中產生。
用color來控制雪花的顏色深淺產生景深,范圍在0~200之間
用fontSize來控制雪花的大小,范圍在10px~15px之間
用time來控制雪花飄落的調用間隔,范圍在40ms~50ms之間
用snowInterval來控制雪花產生的間隔,范圍在500ms~1000ms之間
然後遞歸調用本身,不停產生雪花。
3、fallDown()
顧名思義就是讓雪花飄落,飄落速度speed為2px,即每次縱向下降2px。這個時候做一個檢測,如果雪花下降到固定高度下,即比父容器還高,那麼就remove掉它,這樣可以減輕浏覽器的壓力,要不然太多雪花會導致浏覽器越走越慢,反正已經給overflow:hidden掉看不見了,眼不見為淨。然後在縱向下降的同時調用個windBlow函數,讓雪花下降的藝術些。
4、windBlow()
一個命名貌似風吹,其實真是風吹的效果(這話更廢.哈哈.),利用一個Math.sin()來產生雪花在空中迂回飄蕩的效果,這樣雪花就不會單調的直線下降,而是蛇形飄落,控制好飄落的間隔,這樣連續性比較好,看起來也舒服些。
function letItSnow(){ var snowBox=document.getElementById("snowBox"); var iArray=new Array(); createSnow(snowBox,iArray); } function fallDown(temObj,iArray){ var speed=2; var top=parseInt(temObj.style.top); if(top>510){//當到超過高度時候就刪了它,減輕浏覽器壓力 for(var i=0;i<iArray.length;i++){ if(temObj==iArray[i]){ iArray.splice(i,1); var snowBox=document.getElementById("snowBox"); snowBox.removeChild(temObj); return false; } } } temObj.style.top=top+speed+"px"; var wind=windBlow(temObj,top); temObj.style.left=parseInt(temObj.style.left)+wind*2+"px"; } function windBlow(temObj,top){ if(parseInt(Math.random())%2==1) return Math.sin(top/16); else return Math.cos(top/16); } function createSnow(snowBox,iArray){ var temObj=document.createElement("i"); var temText=document.createTextNode("*"); temObj.appendChild(temText); temObj.style.left=parseInt(Math.random()*window.screen.width)+"px"; temObj.style.top="0px"; var temNum=parseInt(Math.random()*200); temObj.style.color="#"+temNum.toString(16)+temNum.toString(16)+temNum.toString(16); iArray.push(temObj); snowBox.appendChild(temObj); var temNum=0; while(temNum<10){ temNum=parseInt(Math.random()*15); } temObj.style.fontSize=temNum+"px"; var time=0; while(time<40){ time=parseInt(Math.random()*50); } temObj.timer=setInterval(function(){ fallDown(temObj,iArray); },time); var snowInterval=0; while(snowInterval<500){ snowInterval=parseInt(Math.random()*1000); } var createTimer=setTimeout(function(){ createSnow(snowBox,iArray); clearTimeout(createTimer); },snowInterval); }
演示地址:http://demo.jb51.net/js/2014/snow/
好了,四個效果代碼到此結束。希望能幫到有需要的朋友。如果有什麼問題可以在下面留言。