用js代碼和插件實(shí)現(xiàn)wordpress雪花飄落效果的四種方法
冬天到了,很多的博客空間都加了雪花的效果,于是去看了看他們的效果實(shí)現(xiàn)。有好幾個(gè)效果代碼,就拿過(guò)來(lái)了,有需要的朋友可以拿過(guò)去試試看。
雪花大圖片:

效果代碼一
<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 + "雪花圖片的絕對(duì)鏈接地址");
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>
將以上面代碼直接復(fù)制粘貼到主題中的Header或者Footer文件中,如果你只想讓文章頁(yè)面顯示,那就直接添加到single就可以了。 下面把雪花圖片(所需的素材)提供給大家,
小圖片: 需要大家上傳到自己的博客的當(dāng)前使用的主題中,然后把代碼中的鏈接改成圖片所在的位置即可。效果如本頁(yè)面所示.
效果代碼二:
<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>
這個(gè)效果演示如下(感覺比較丑,不推薦):
效果代碼三
其實(shí)實(shí)現(xiàn)WordPress博客飄落雪花的還可以用 let it snow 插件。
let it snow插件使用方法我就在這里不嘮叨了,和其它插件安裝沒啥區(qū)別,可以直接去下載上傳文件夾let it snow里面的文件到/wp-content/plugins/目錄,然后激活此插件,在WordPress的管理面板菜單設(shè)置插件即可?;蛘咴诤箢^插件庫(kù)里面直接搜索,也可以找到。
let it snow 官方網(wǎng)站:點(diǎn)擊訪問(wèn)
效果代碼四
在網(wǎng)上看到一個(gè)非常強(qiáng)大的SnowStorm插件。和牛逼啊,好像是google上搜let it snow會(huì)有下雪以及霜凍效果的代碼,很有創(chuàng)意。覺得好的童鞋可以自己去官網(wǎng)看看。
網(wǎng)上找了一個(gè)簡(jiǎn)單的隨機(jī)的雪花飄落效果代碼分享給大家(這個(gè)效果是純代碼寫的。雪花就是*。):
稍微解釋下里面的幾個(gè)函數(shù):
1、letItSnow()
就是下雪啦(這句依舊是廢)。然后就調(diào)用createSnow來(lái)產(chǎn)生雪花。
2、createSnow()
產(chǎn)生雪花每個(gè)雪花都是一個(gè)<i>標(biāo)簽,里面放一個(gè)“*”來(lái)模擬雪花(google那個(gè)copy不下來(lái),居然顯示為空格,我了個(gè)太陽(yáng)…),然后放到一個(gè)大容器叫snowBox里面,產(chǎn)生的個(gè)體push進(jìn)iArray里面收集起來(lái)。雪花采用的是以snowBox為參照的絕對(duì)定位方式,top為0px,left就用Math.random()*window.screen.width,讓雪花隨機(jī)在屏幕寬度中產(chǎn)生。
用color來(lái)控制雪花的顏色深淺產(chǎn)生景深,范圍在0~200之間
用fontSize來(lái)控制雪花的大小,范圍在10px~15px之間
用time來(lái)控制雪花飄落的調(diào)用間隔,范圍在40ms~50ms之間
用snowInterval來(lái)控制雪花產(chǎn)生的間隔,范圍在500ms~1000ms之間
然后遞歸調(diào)用本身,不停產(chǎn)生雪花。
3、fallDown()
顧名思義就是讓雪花飄落,飄落速度speed為2px,即每次縱向下降2px。這個(gè)時(shí)候做一個(gè)檢測(cè),如果雪花下降到固定高度下,即比父容器還高,那么就remove掉它,這樣可以減輕瀏覽器的壓力,要不然太多雪花會(huì)導(dǎo)致瀏覽器越走越慢,反正已經(jīng)給overflow:hidden掉看不見了,眼不見為凈。然后在縱向下降的同時(shí)調(diào)用個(gè)windBlow函數(shù),讓雪花下降的藝術(shù)些。
4、windBlow()
一個(gè)命名貌似風(fēng)吹,其實(shí)真是風(fēng)吹的效果(這話更廢.哈哈.),利用一個(gè)Math.sin()來(lái)產(chǎn)生雪花在空中迂回飄蕩的效果,這樣雪花就不會(huì)單調(diào)的直線下降,而是蛇形飄落,控制好飄落的間隔,這樣連續(xù)性比較好,看起來(lái)也舒服些。
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){//當(dāng)?shù)匠^(guò)高度時(shí)候就刪了它,減輕瀏覽器壓力
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/
好了,四個(gè)效果代碼到此結(jié)束。希望能幫到有需要的朋友。如果有什么問(wèn)題可以在下面留言。
- 使用js實(shí)現(xiàn)雪花飄落效果
- 使用javascript實(shí)現(xiàn)雪花飄落的效果
- JS和JQuery實(shí)現(xiàn)雪花飄落效果
- JS實(shí)現(xiàn)的雪花飄落特效示例
- Js Snowflake(雪花算法)生成隨機(jī)ID的實(shí)現(xiàn)方法
- 下雪了 javascript實(shí)現(xiàn)雪花飛舞
- 原生JS實(shí)現(xiàn)的雪花飄落動(dòng)畫效果
- JS實(shí)現(xiàn)模擬風(fēng)力的雪花飄落效果
- JS實(shí)現(xiàn)炫酷雪花飄落效果
- JavaScript實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)飄落的雪花
相關(guān)文章
javascript中數(shù)組和字符串的方法對(duì)比
下面小編就為大家?guī)?lái)一篇javascript中數(shù)組和字符串的方法對(duì)比。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-07-07
淺析JavaScript Array和string的轉(zhuǎn)換(推薦)
下面小編就為大家?guī)?lái)一篇淺析JavaScript Array和string的轉(zhuǎn)換(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-05-05
bootstrap timepicker在angular中取值并轉(zhuǎn)化為時(shí)間戳
這篇文章主要介紹了bootstrap timepicker在angular中取值并轉(zhuǎn)化為時(shí)間戳的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
javascript模擬map輸出與去除重復(fù)項(xiàng)的方法
這篇文章主要介紹了javascript模擬map輸出與去除重復(fù)項(xiàng)的方法,通過(guò)自定義函數(shù)結(jié)合遍歷與刪除的方法實(shí)現(xiàn)了去除重復(fù)項(xiàng)的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-02-02
VS?Code中JavaScript環(huán)境搭建配置全過(guò)程
node.js大部分基本模塊都用JavaScript語(yǔ)言編寫,JavaScript最早是運(yùn)行在瀏覽器中,通常作為客戶端程序設(shè)計(jì)語(yǔ)言使用,node.js的出現(xiàn)使JavaScript也能用于服務(wù)端編程,這篇文章主要給大家介紹了關(guān)于VS?Code中JavaScript環(huán)境搭建配置的相關(guān)資料,需要的朋友可以參考下2024-02-02
ES6新特性八:async函數(shù)用法實(shí)例詳解
這篇文章主要介紹了ES6新特性八:async函數(shù)用法,結(jié)合實(shí)例形式分析了async函數(shù)的功能、原理、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-04-04
ES6基礎(chǔ)之展開語(yǔ)法(Spread syntax)
這篇文章主要介紹了ES6基礎(chǔ)之展開語(yǔ)法(Spread syntax),主要介紹了擴(kuò)展語(yǔ)法的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

