jQuery文字從頂部掉落效果
本章節分享一段程式碼例項,它實現了文字從頂部掉落,然後組成一個字串的效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> .canvas{ width:500px; height:500px; position:relative; } </style> <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> <script type="text/javascript"> function Falling(){ this.dict=["antzone","softwhy","青島市南區","螞蟻部落","努力奮鬥","css","js","softwhy.com"]; this.canvas=$("#canvas"); this.freq=10; this.height=500; this.width=500; this.si=null; } Falling.prototype={ fallingAction:function(dom){ var self=this; var freqs=[10,15,20]; var disS=[]; var disPerFreqS=[]; var targetDis=500; var domCssTopS=[]; var successDom=[]; var successCount=0; var total=dom.length; var freqMarkLength=freqs.length; for(var index=0,j=dom.length;index<j;index++){ domCssTopS[index]=dom[index].position().top; disS[index]=0; disPerFreqS[index]=freqs[parseInt(Math.random()*freqMarkLength)]; } self.si=setInterval(function(){ if(successCount>=total){ clearInterval(self.si); } for(var index=0,j=dom.length;index<j;index++){ if(typeof(successDom[index])!="undefined" && successDom[index]=="ok"){ continue; } disS[index] += disPerFreqS[index]; if(disS[index] >= targetDis){ dom[index].css("top", targetDis+domCssTopS[index]); successDom[index]="ok"; successCount++;; }else{ dom[index].css("top", disS[index]+domCssTopS[index]); } } },self.freq); }, init:function(){ var self=this; self.canvas.html(''); var dom=[]; var l=0; var t=0; var tempDom=$("<div></div>").appendTo($("body")); for(var index=0,j=self.dict.length;index<j;index++){ dom[index]=$("<span style='position:absolute'>"+self.dict[index]+"</span>").appendTo(tempDom); var domWidth=dom[index].width(); var domHeight=dom[index].height(); if(t<self.height){ if(l<self.width){ if(domWidth+l<=self.width){ dom[index].css({"top":t,"left":l}); self.canvas.append(dom[index]); l += dom[index].width(); }else{ if(domHeight+t<=self.height){ t=t+domHeight; dom[index].css({"top":t,"left":0}); self.canvas.append(dom[index]); l = dom[index].width(); }else{ break; } } }else{ if(domHeight+t<=self.height){ t=t+domHeight; l=0; dom[index].css({"top":t,"left":l}); self.canvas.append(dom[index]); }else{ break; } } } } self.fallingAction(dom); } } $(document).ready(function(){ var falling=new Falling(); $("#bt").click(function(){ falling.init(); }) }); </script> </head> <body> <div> <input type="button" id="bt" value="檢視效果" /> </div> <div class="canvas" id="canvas"></div> </body> </html>
上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).function Falling(){},建立一個建構函式,裡面定義了一些基本引數。
(2).this.dict=["antzone","softwhy","青島市南區","螞蟻部落","努力奮鬥","css","js","softwhy.com"],將要掉落的文字放入陣列。
(3).this.canvas=$("#canvas"),獲取id屬性值為canvas的元素。
(4).this.freq=10,設定定時器執行的間隔。
(5).this.height=500,設定高度值,這個值就是canvas元素的高度。
(6).this.width=500,設定寬度值,這個值就是canvas元素的寬度。
(7).this.si=null,用來作為定時器函式的標識。
(8).Falling.prototype={},設定Falling的原型物件。
(9).fallingAction:function(dom){},實現下落動作,引數是包裝有每一個字串的dom元素。
(10).var self=this,將this的索引值賦值給self變數。
(11).var freqs=[10,15,20],此陣列定義了每次下落的尺寸,隨機抽取使用。
(12).var disS=[],記錄每個dom元素的距離頂部的尺寸。
(13).var disPerFreqS=[],儲存每一個dom元素下落的速度。
(14).var targetDis=500,這個是最大尺寸。
(15).var domCssTopS=[],儲存每一個dom元素的top屬性值。
(16).var successDom=[],儲存哪些元素已經落到底部。
(17).var successCount=0,儲存有多少個元素已經完成。
(18).var total=dom.length,獲取dom元素的數目。
(19).var freqMarkLength=freqs.length,獲取定義速度的陣列元素的數目。
(20).for(var index=0,j=dom.length;index<j;index++){
domCssTopS[index]=dom[index].position().top;
disS[index]=0;
disPerFreqS[index]=freqs[parseInt(Math.random()*freqMarkLength)];
},遍歷每一個dom元素。
獲取每一個dom元素的top屬性值並存入domCssTopS陣列。
disS[index]=0,初始化元素最初下滑的距離,當然是0。
disPerFreqS[index]=freqs[parseInt(Math.random()*freqMarkLength)],隨機獲取每一個dom元素下滑的速度。
(21).self.si=setInterval(function(){
if(successCount>=total){
clearInterval(self.si);
}
for(var index=0,j=dom.length;index<j;index++){
if(typeof(successDom[index])!="undefined" && successDom[index]=="ok"){
continue;
}
disS[index] += disPerFreqS[index];
if(disS[index] >= targetDis){
dom[index].css("top", targetDis+domCssTopS[index]);
successDom[index]="ok";
successCount++;;
}else{
dom[index].css("top", disS[index]+domCssTopS[index]);
}
}
},self.freq);
通過定時器函式不斷的調整元素的下落。
if(successCount>=total){
clearInterval(self.si);
},如果完成的數量已經達到總數量,那麼就停止定時器函式的執行。
for(var index=0,j=dom.length;index<j;index++),遍歷每一個dom元素。
if(typeof(successDom[index])!="undefined" && successDom[index]=="ok"){
continue;
},判斷元素是否已經完成,如果完整那麼就跳過此次迴圈,進入下一個。
disS[index] += disPerFreqS[index],每一次執行都會累加下滑的距離。
if(disS[index] >= targetDis){
dom[index].css("top", targetDis+domCssTopS[index]);
successDom[index]="ok";
successCount++;;
}else{
dom[index].css("top", disS[index]+domCssTopS[index]);
}如果下滑的尺寸大於最大尺寸,那麼就設定元素的top值最大尺寸加上dom元素的top值。
同時設定當前dom元素為完成狀態,然後再給完整下滑的元素數量累加1。
否則的話,則繼續設定top屬性值(當然按照正常累加)。
(22).init:function(){},此方法實現了一些初始化效果。
(23).var self=this,將this值賦值給self,通常這麼做的目的是為了防止不同的上下文中this發生改變,無法引用到原來的物件。
(24).self.canvas.html(''),清空dom元素。
(25).var dom=[],宣告一個陣列用來儲存dom元素。
(26).var l=0,宣告一個變數作為元素距離cansvas元素左側的距離。
(27).var t=0,宣告一個變數作為元素距離cansvas元素頂部的距離。
(28).var tempDom=$("<div style='position;absolute;left:-100000;visibility:hidden'></div>").appendTo($("body")),建立一個div元素,設定它為隱藏狀態,並且新增到body中。
(29).for(var index=0,j=self.dict.length;index<j;index++),遍歷陣列中的每一個元素。
(30).dom[index]=$("<span style='position:absolute'>"+self.dict[index]+"</span>").appendTo(tempDom),建立一個span元素,這個span元素中的內容就是陣列中的文字內容,並追加給剛建立的div元素。
(31).var domWidth=dom[index].width(),獲取dom元素的寬度。
(32).var domHeight=dom[index].height(),獲取dom元素的高度。
(33).if(t<self.height){
if(l<self.width){
if(domWidth+l<=self.width){
dom[index].css({"top":t,"left":l});
self.canvas.append(dom[index]);
l += dom[index].width();
}else{
if(domHeight+t<=self.height){
t=t+domHeight;
dom[index].css({"top":t,"left":0});
self.canvas.append(dom[index]);
l = dom[index].width();
}else{
break;
}
}
}else{
if(domHeight+t<=self.height){
t=t+domHeight;
l=0;
dom[index].css({"top":t,"left":l});
self.canvas.append(dom[index]);
}else{
break;
}
}
}這段程式碼的功能基本是水平排列span元素,也就是將字串成行排列,如果超過寬度就進行換行。
二.相關閱讀:
(1).prototype參閱JavaScript prototype原型一章節。
(2).position()參閱jQuery position()一章節。
(3).parseInt()參閱JavaScript parseInt()一章節。
(4).Math.random()參閱JavaScript Math.random()一章節。
(5).setInterval()參閱setInterval()一章節。
(6).clearInterval()參閱window.clearInterval()一章節。
(7).appendTo()參閱jQuery appendTo()一章節。
相關文章
- jQuery頂部帶有選項卡的焦點圖效果jQuery
- jQuery之回到頂部jQuery
- 回到頂部效果之加速置頂
- 從頁面底部回到頂部+動畫效果 & 翻頁後從按鈕處回到頁面頂部動畫
- jquery經典例項之回到頂部jQuery
- 網頁頂部陰影邊框效果網頁
- [前端外掛] js返回頂部 效果實現前端JS
- Android RecyclerView實現頭部懸浮吸頂效果AndroidView
- 直播軟體搭建,利用原生JS實現回到頂部以及吸頂效果JS
- app直播原始碼,利用原生JS實現回到頂部以及吸頂效果APP原始碼JS
- js、jQuery實現文字上下無縫輪播、滾動效果JSjQuery
- 網站返回頂部jquery js實現程式碼方式案例網站jQueryJS
- jQuery 效果方法jQuery
- “吸頂”效果
- jQuery基礎 效果jQuery
- jQuery 放大鏡效果jQuery
- jQuery 效果 – 動畫jQuery動畫
- jQuery 效果 – 滑動jQuery
- 專案常用效果!Flutter仿頭條頂部tab切換實現!Flutter
- jQuery 效果 – 停止動畫jQuery動畫
- jQuery 效果 – 淡入淡出jQuery
- jQuery簡單tab效果jQuery
- TesterHome 首頁頂部的導航箭頭點選沒什麼效果
- 成品直播原始碼推薦,TableView/CollectionView 滑動頂部效果最佳化原始碼View
- jQuery彈幕效果詳解jQuery
- jQuery打字機效果程式碼jQuery
- jQuery實現輪播效果jQuery
- jQuery 04 效果 淡入淡出jQuery
- jQuery 放大鏡效果詳解jQuery
- 實現web置頂效果Web
- 直播軟體搭建,vue3 頁面回到頂部(平緩滾動效果)Vue
- 回到頂部和回到頂部按鈕的顯示隱藏
- 點選回到頂部
- 返回頂部寫法
- jquery中淡入淡出效果案例jQuery
- jquery焦點圖效果視訊jQuery
- jQuery 效果 – 隱藏和顯示jQuery
- jQuery 實現淡入淡出效果jQuery