JY案例一:瀑布流布局頁面


JY案例一:瀑布流布局頁面

作者:田想兵 博客地址:http://www.cnblogs.com/tianxiangbing

在我的上一篇博文里,介紹了由我自主開發的javascript框架JY ,由於最近要整理BUG,還要寫JY的API ,所以一直沒空出Demo,糾結的API,我還是放棄吧,等以后誰好心幫我補充完整吧。

由於消息不靈通,最近才聽到一個新名詞“瀑布流”布局, 說現在很流行,作為一個走在時尚尖端的技術流前端,怎么能落伍呢?於是乎,百度百科了下,它是這樣定義的:

瀑布流,又稱瀑布流式布局。是目前比較流行的一種網站頁面布局,視覺表現為參差不齊的多欄布局,隨着頁面滾動條向下滾動,這種布局還會不斷加載數據塊並附加至當前尾部  

它有兩個重點,一個是參差不齊,但不是完全的,而只是“等寬不等高”,每項的寬度是一樣的,但高度不同;另一個重點是它是滾動式加載的。百度百科上還說,有三種實現方式:

本文案例請 點擊這里 !  
1、傳統多列浮動。代表網站 蘑菇街和哇哦
2、用CSS3實現

3、絕對定位。代表網站Pinterest 

今天我們要實現的就是第一種方式,也是最簡單最快的一種。效果圖:

 

首先我們要選擇一個好用的js框架,我這里因為是JY的案例,所以肯定一定是用的JY啦,^_^,所以應觀眾要求,我們就選用了JY,然后,就是准備用幾列來表現了,好,又有觀眾說要用三列了。還有數據源,這里我們用json格式的文本。如下格式:

[{ " url ": " imgs/1.jpg ", " text ": " javascript JY "},{ " url ": " imgs/2.jpg ", " text ": " javascript JY "},{ " url ": " imgs/3.jpg ", " text ": " javascript JY "},{ " url ": " imgs/2.jpg ", " text ": " javascript JY "},{ " url ": " imgs/1.jpg ", " text ": " javascript JY "},{ " url ": " imgs/1.jpg ", " text ": " javascript JY "},{ " url ": " imgs/2.jpg ", " text ": " javascript JY "},{ " url ": " imgs/3.jpg ", " text ": " javascript JY "},{ " url ": " imgs/1.jpg ", " text ": " javascript JY "},{ " url ": " imgs/2.jpg ", " text ": " javascript JY "},{ " url ": " imgs/3.jpg ", " text ": " javascript JY "},{ " url ": " imgs/3.jpg ", " text ": " javascript JY "}]

 

 就兩屬性,一個圖片URL,一個文本說明,其它不多說。然后我們打算把它放到一個div容器里,分三個ul顯示.

< div  class ="content waterfall_old clearfix" >
             < ul >
                 < li >< img  src ="imgs/1.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
                 < li >< img  src ="imgs/1.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
                 < li >< img  src ="imgs/1.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
             </ ul >
             < ul >
                 < li >< img  src ="imgs/2.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
                 < li >< img  src ="imgs/1.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
                 < li >< img  src ="imgs/1.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
             </ ul >
             < ul >
                 < li >< img  src ="imgs/3.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
                 < li >< img  src ="imgs/2.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
                 < li >< img  src ="imgs/1.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
                 < li >< img  src ="imgs/1.jpg"  alt ="JY javascript" />< div >JY javascript </ div ></ li >
             </ ul >              </ div >  

 然后,我們要把數據源填棄進這個div呢,問題就來了,該怎么填充呢,又有觀眾說了,一個里面放一個不就完了,這位觀眾說得很好,於是,我就把數據源分成了三組。准備,一個ul里放一個組的數據,代碼如下:

             var arr =[]; 
             var rl = r.length;//數據源長度
             var len = rl %column ==0 ? parseInt(rl/column):parseInt(rl/column)+1;
             for ( var j=0;j<len ;j++ ){
                 var tmp = [];
                 for ( var i =0,l=column; i< l && r.length ;i++ ){
                    tmp.push(r.shift());                    
                }
                arr.push(tmp);            }  

這樣就按column分好組了,不復雜吧?!這個跟寫分頁時是一樣的道理,又不完全一樣。看不懂就多看幾遍就懂了。這里沒有JY代碼呢!

分好組后,我們就把它強勢插入到各個ul里吧。

             for ( var i =0,l=arr.length;i<l ;i++ ){
                 for ( var j = 0, ln=arr[i].length; j<ln ;j++ ){
                     var tmp = document.createElement("li");
                    tmp.innerHTML = '<img src="'+arr[i][j].url+'" alt="'+arr[i][j].text+'"/><div>'+arr[i][j].text+'</div>'
                    JY.query(".waterfall_old ul:eq("+j+")")[0].appendChild(tmp);
                }            }  

ps:怎么博客園的編輯器,插入代碼的時候,總是會有一行跑到外面來的,真是糾結

最后就是滾動加載了,這個應該會簡單點吧,就是滾到差不多底部的時候,就再ajax請求一次數據源。 

         function dongtaiMore() {
         if (JY.byId("footer_wrap"))
             if ( parseInt(document.documentElement.scrollTop) + JY.height(window) > JY.offset("footer_wrap").y) {
                curPage++;
               show(curPage);
            }
    };   JY.bind(window,"scroll",dongtaiMore);  

 這樣,就算完事了,沒有想象中那么復雜吧?!當然這只是一個簡單的例子,你可以把它做得更完美些。因為現在是均勻分布在三列里的,這勢必會造成最后某列參差不齊。但這種傳統的做法,冒似也沒有更好的優化方法,除非你知道每張圖片的高度,那樣就可以去計算了。這就是剛才說的絕對定位的方法。這留到下次再說吧!

今天就到這,本文案例請點擊這里!如果你有任何的疑問都不要來問我,請重復閱讀本文,或加入Q群70210212。 
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM