任務30 淺談瀑布流布局原理

<p>眾所周知:瀑布流布局是比較流行的一種網(wǎng)站頁面布局,視覺表現(xiàn)為參差不齊的多欄布局,隨著頁面滾動條向下滾動,這種布局還會不斷加載數(shù)據(jù)塊并附加至當前尾部。最早采用此布局的網(wǎng)站是Pinterest,逐漸在國內流行開來。國內大多數(shù)清新站基本為這類風格。</p>
<p>通俗點說:瀑布流布局就是指將一系列參差不齊的目標使其完美的在容器中進行排列。而這個排列又涉及到以下內容:
<ol>
<li>容器的寬度,目標自身的寬度:這兩個可以得知容器的每一排可以放置多少個目標。</li>
<li>目標自身的height:這個決定了下一排的第一個元素應該放在什么位置,第二個又該放置在什么位置;而這正是該布局的難點所在:
1).瀑布流布局的每一排就像一個數(shù)組,而數(shù)組里邊的元素所帶的值應該弄清楚每個值得序號和高度。
2).找出第一排高度最小的值和對應的序號,然后第二排的第一個元素就放在該 序號元素的下邊,以后每一排的序號都不難得出,但是高度卻是每個相同序號元素的高度之和的最小值,以此循環(huán)。
</li>
</ol>
</p>

代碼實現(xiàn):

function water(){
        var nodeWidth=$('.item').outerWidth(true);//目標的外寬度
        var colNum   =parseInt($(window).width()/nodeWidth);//容器中每一排能放多少個目標
        var colSumHeight = [] ;//創(chuàng)建一個空數(shù)組
        for(var i=0;i<colNum;i++){
            colSumHeight.push(0);
        }//根據(jù)每一排能放多少個目標,遍歷空數(shù)組colSumHeight,并把0 push進去

//用jq的方法遍歷每一個目標,并對比確定序號和MinHeight
        $('.item').each(function(){
            var $cur=$(this);

            var idx=0;//為了便于比較,給序號設置一個初始值。
            var minSumHeight=colSumHeight[0];//同上
            for(var i=0;i<colSumHeight.length;i++){
                if(colSumHeight[i]<minSumHeight){
                    idx=i;
                    minSumHeight=colSumHeight[i];
                }//對比得出minHeight和對應的序號
            }
            $cur.css({
                left:nodeWidth*idx,
                top:minSumHeight
            });//當前元素應該放置的位置
            colSumHeight[idx]=$cur.outerHeight(true)+colSumHeight[idx];//給第Idx個元素的高度賦值。
        });
        }
        water();//由于前面是封裝在一個函數(shù)里的,這里只是調用執(zhí)行而已
              
    $(window).on('resize',function(){
                      water();
    })//根據(jù)容器的尺寸排列

綜上這就是瀑布流布局的原理以及實現(xiàn)方式。
本文版權歸饑人谷和作者所有,如需轉載,請注明來源,謝謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽默認的外補...
    _Yfling閱讀 14,206評論 1 92
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 翻譯自“Collection View Programming Guide for iOS” 0 關于iOS集合視...
    lakerszhy閱讀 4,084評論 1 22
  • 三(2)班 付俊樺 今天放學,媽媽來接我的時候對我說:“今天晚上我們去姑奶奶家吃火鍋?!? ...
    靈濟四2閱讀 940評論 0 1
  • 學生是有個性差異的。人的性格是不同的,人的情趣愛好、人的能力是有差異的,生活是豐富多彩的,文章、文學作品是...
    一葉一花_d911閱讀 241評論 0 0

友情鏈接更多精彩內容