最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入學(xué)習(xí)js瀑布流布局

 更新時間:2016年10月14日 10:48:21   作者:WardLin  
這篇文章主要幫助大家深入理解js瀑布流布局,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了js瀑布流布局學(xué)習(xí)資料,供大家參考,具體內(nèi)容如下

特點(diǎn):等寬不等高。
實(shí)現(xiàn)方式:Javascript/Jquery/CSS3多欄布局。
樣例網(wǎng)站:花瓣網(wǎng)-->分類

一、JS實(shí)現(xiàn)瀑布流

index.html:頁面結(jié)構(gòu)    

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>瀑布流布局</title>
  <link rel="stylesheet" href="styles/layout.css">
</head>
<body>
  <div id="main">
    <div class="box"><div class="pic"><img src="../waterFall/pic/0.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/1.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/2.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/3.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/4.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/5.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/6.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/7.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/8.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/9.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/10.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/11.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/12.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/13.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/14.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/15.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/16.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/17.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/18.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/19.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/20.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/21.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/22.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/23.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/24.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/25.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/26.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/27.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/28.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/29.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/30.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/31.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/32.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/33.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/34.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/35.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/36.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/37.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/38.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/39.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/40.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/41.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/42.jpg" alt=""></div></div>
    <div class="box"><div class="pic"><img src="../waterFall/pic/43.jpg" alt=""></div></div>
  </div>
  <script src="scripts/waterfall.js"></script>
</body>
</html>

layout.css:頁面元素樣式

*{
  pdding:0;
  margin:0;
}
div#main{
  position: relative;
}
div.box{
  padding:15px 0 0 15px;
  float: left;
}
div.pic{
  padding:10px;
  border:1px solid #ccc;
  border-radius:5px;
  box-shadow: 0 0 5px #ccc;
}
.pic img{
  height:auto;
  width:165px;
}

waterfall.js

window.onload=function(){
  waterFall('main','box');
  //模擬后臺相應(yīng)數(shù)據(jù)json
  var dataInt={
    "data":
    [
     {"src":"0.jpg"},
     {"src":"1.jpg"},
     {"src":"2.jpg"},
     {"src":"3.jpg"},
     {"src":"4.jpg"},
     {"src":"5.jpg"},
     {"src":"6.jpg"}
    ]
  }
  window.onscroll=function(){
    if(checkScrollSlide){
      //將數(shù)據(jù)塊渲染到當(dāng)前頁面的尾部
     var oParent=document.getElementById("main");
     for(var i=0;i<dataInt.data.length;i++){
       var oBox=document.createElement("div");
       oBox.className="box";
       oParent.appendChild(oBox);
       var oPic=document.createElement("div");
       oPic.className="pic";
       oBox.appendChild(oPic);
       var img=document.createElement("img");
       img.setAttribute("src",dataInt.data[i]);
       img.src="pic/"+dataInt.data[i].src;
       oPic.appendChild(img);
     }
     dataInt=null;//清空數(shù)據(jù)塊,防止無限加載
     waterFall('main','box');//對頁面新元素進(jìn)行布局渲染
    }
  }
}
function waterFall(parent,box){
  //將main下的class為box的所有元素取出來
  var oParent=document.getElementById(parent);
  var oBoxs=getByClass(oParent,box);
  console.log(oBoxs.length);
  //計算整個頁面顯示的列數(shù)(頁面寬/box寬)
  var oBoxW=oBoxs[0].offsetWidth;
  // console.log(oBoxW);
  var cols=Math.floor(document.documentElement.clientWidth/oBoxW);
  // console.log(cols);
  //設(shè)置main的寬
  oParent.style.cssText="width:"+oBoxW*cols+"px;margin:0 auto;"
  var hArr=[];//存放每列高度的數(shù)組
  for(var i=0;i<oBoxs.length;i++){
    if(i<cols){
      hArr.push(oBoxs[i].offsetHeight);
    }else{
      var minH=Math.min.apply(null,hArr);//獲取當(dāng)前數(shù)組最小高度值
      // console.log(minH);
      var index=getMinhIndex(hArr,minH);//獲取數(shù)組最小高度的索引
      //console.log(index);
      oBoxs[i].style.position="absolute";//將之后的圖片依次絕對定位
      oBoxs[i].style.top=minH+"px";
      oBoxs[i].style.left=index*oBoxW+"px";//計算新圖片所在的位置并賦值
      hArr[index]+=oBoxs[i].offsetHeight;//變化數(shù)組列的高度值,因?yàn)榧由狭艘粡垐D片
    }
    //console.log(hArr);
  }

}
//根據(jù)class獲取元素
function getByClass(parent,clsName){
  var boxArr=new Array(),//用來存儲獲取到的所有class為box的元素
    oElements=parent.getElementsByTagName("*");
    for(var i=0;i<oElements.length;i++){
      if(oElements[i].className==clsName){
        boxArr.push(oElements[i]);
      }
    }
  return boxArr;
}
function getMinhIndex(arr,val){
  for(var i=0;i<arr.length;i++){
    if(arr[i]==val){
      return i;
    }
  }

}
//檢測是否具備滾動條加載數(shù)據(jù)塊條件
function checkScrollSlide(){
  var oParent=document.getElementById("main");
  var oBoxs=getByClass(oParent,"box");
  var lastBoxH=oBoxs[oBoxs.length-1].offsetTop+Math.floor(oBoxs[oBoxs.length-1].offsetHeight/2);
  var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;//混雜模式和標(biāo)準(zhǔn)模式下的scrollTop獲取
  //console.log(scrollTop);
  var height=document.body.clientHeight||document.documentElement.clientHeight;//混雜模式和標(biāo)準(zhǔn)模式下的瀏覽器窗口高度獲取
  return (lastBoxH<scrollTop+height)?true:false;//檢測最后一個box高度是否小于滾動高度+窗口高度,返回布爾值

}

 二、JQuery      

$( window ).on( "load", function(){
  waterfall('main','pin');
  var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};
  window.onscroll=function(){
    if(checkscrollside()){
      $.each( dataInt.data, function( index, value ){
        var $oPin = $('<div>').addClass('pin').appendTo( $( "#main" ) );
        var $oBox = $('<div>').addClass('box').appendTo( $oPin );
        $('<img>').attr('src','./images/' + $( value).attr( 'src') ).appendTo($oBox);
      });
      waterfall();
    };
  }
});

/*
  parend 父級id
  pin 元素id
*/
function waterfall(parent,pin){
  var $aPin = $( "#main>div" );
  var iPinW = $aPin.eq( 0 ).width();// 一個塊框pin的寬
  var num = Math.floor( $( window ).width() / iPinW );//每行中能容納的pin個數(shù)【窗口寬度除以一個塊框?qū)挾取?
  //oParent.style.cssText='width:'+iPinW*num+'px;ma rgin:0 auto;';//設(shè)置父級居中樣式:定寬+自動水平外邊距
  $( "#main" ).css({
    'width:' : iPinW * num,
    'margin': '0 auto'
  });

  var pinHArr=[];//用于存儲 每列中的所有塊框相加的高度。

  $aPin.each( function( index, value ){
    var pinH = $aPin.eq( index ).height();
    if( index < num ){
      pinHArr[ index ] = pinH; //第一行中的num個塊框pin 先添加進(jìn)數(shù)組pinHArr
    }else{
      var minH = Math.min.apply( null, pinHArr );//數(shù)組pinHArr中的最小值minH
      var minHIndex = $.inArray( minH, pinHArr );
      $( value ).css({
        'position': 'absolute',
        'top': minH + 15,
        'left': $aPin.eq( minHIndex ).position().left
      });
      //數(shù)組 最小高元素的高 + 添加上的aPin[i]塊框高
      pinHArr[ minHIndex ] += $aPin.eq( index ).height() + 15;//更新添加了塊框后的列高
    }
  });
}

function checkscrollside(){
  var $aPin = $( "#main>div" );
  var lastPinH = $aPin.last().get(0).offsetTop + Math.floor($aPin.last().height()/2);//創(chuàng)建【觸發(fā)添加塊框函數(shù)waterfall()】的高度:最后一個塊框的距離網(wǎng)頁頂部+自身高的一半(實(shí)現(xiàn)未滾到底就開始加載)
  var scrollTop = $( window ).scrollTop()//注意解決兼容性
  var documentH = $( document ).height();//頁面高度
  return (lastPinH < scrollTop + documentH ) ? true : false;//到達(dá)指定高度后 返回true,觸發(fā)waterfall()函數(shù)
}

三、CSS多欄布局    

.container{
  -webkit-column-width:160px;
  -moz-column-width:160px; 
   -webkit-column-gap:5px;
   -moz-column-gap:5px;
}


/*數(shù)據(jù)塊 磚塊*/

.container div{width:160px;
        margin:4px 0;}

【css3和js實(shí)現(xiàn)方法比較】
--css3方式--
1:不需要計算,瀏覽器自動計算,只需設(shè)置1列寬,性能高
2:列寬隨著瀏覽器寬口大小進(jìn)行改變,用戶體驗(yàn)不好;
3:圖片排序按照垂直順序排列,打亂圖片顯示順序
4.圖片加載還是需要js
--js方式--
js實(shí)現(xiàn)的瀑布流不會有上面的缺點(diǎn),但是性能相對要差!

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • uni-app中px與rpx的轉(zhuǎn)換方法

    uni-app中px與rpx的轉(zhuǎn)換方法

    這篇文章主要給大家介紹了關(guān)于uni-app中px與rpx的轉(zhuǎn)換方法,rpx單位最初由微信推出,它與我們常用px一個很大的區(qū)別就是具有響應(yīng)式,需要的朋友可以參考下
    2023-10-10
  • javascript用函數(shù)實(shí)現(xiàn)對象的方法

    javascript用函數(shù)實(shí)現(xiàn)對象的方法

    這篇文章主要介紹了javascript用函數(shù)實(shí)現(xiàn)對象的方法,涉及javascript函數(shù)使用技巧,需要的朋友可以參考下
    2015-05-05
  • uni-app中使用手機(jī)號一鍵登錄的詳細(xì)圖文教程

    uni-app中使用手機(jī)號一鍵登錄的詳細(xì)圖文教程

    最近剛接觸了uni-app,用于開發(fā)微信小程序,設(shè)計到了微信授權(quán)登錄,下面這篇文章主要給大家介紹了關(guān)于uni-app中使用手機(jī)號一鍵登錄的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 使用ThinkJs搭建微信中控服務(wù)的實(shí)現(xiàn)方法

    使用ThinkJs搭建微信中控服務(wù)的實(shí)現(xiàn)方法

    這篇文章主要介紹了使用ThinkJs搭建微信中控服務(wù)的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • javascript基于prototype實(shí)現(xiàn)類似OOP繼承的方法

    javascript基于prototype實(shí)現(xiàn)類似OOP繼承的方法

    這篇文章主要介紹了javascript基于prototype實(shí)現(xiàn)類似OOP繼承的方法,實(shí)例分析了JavaScript使用prototype實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計的中類繼承的相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • 一文教你如何優(yōu)雅的使用WebSocket

    一文教你如何優(yōu)雅的使用WebSocket

    WebSocket最大特點(diǎn)就是服務(wù)器可以主動向客戶端推送信息,客戶端也可以主動向服務(wù)器發(fā)送信息,是真正的雙向平等對話,屬于服務(wù)器推送技術(shù)的一種,下面這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅的使用WebSocket的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • js代碼判斷瀏覽器種類IE、FF、Opera、Safari、chrome及版本

    js代碼判斷瀏覽器種類IE、FF、Opera、Safari、chrome及版本

    這篇文章主要分享了判斷IE、FF、Opera、Safari、Chrome等瀏覽器和版本的兩種方法,需要的朋友可以參考下
    2014-05-05
  • ScrollDown的基本操作示例

    ScrollDown的基本操作示例

    本文將涉及到scroll方法的應(yīng)用,判斷當(dāng)滾動條滾到底部時觸發(fā)scrollTop執(zhí)行函數(shù),具體代碼如下,感興趣的朋友可以了解下哈
    2013-06-06
  • 驗(yàn)證javascript中Object和Function的關(guān)系的三段簡單代碼

    驗(yàn)證javascript中Object和Function的關(guān)系的三段簡單代碼

    今天重溫經(jīng)典書籍。這一次看的是博客園李戰(zhàn)老師寫的<<悟透JavaScript>>,也是被樓豬翻看最多的技術(shù)書籍之一。
    2010-06-06
  • js獲取隱藏元素的寬高

    js獲取隱藏元素的寬高

    本文主要介紹了使用js獲取隱藏元素寬高的解決方案以及代碼思路,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02

最新評論

衡东县| 渭南市| 双牌县| 万荣县| 泉州市| 屏东县| 友谊县| 沁源县| 五指山市| 滁州市| 镇康县| 宜川县| 霍城县| 南岸区| 长顺县| 会理县| 贵南县| 诸暨市| 永修县| 木兰县| 渝北区| 乌拉特前旗| 天峨县| 泰州市| 黔西| 惠水县| 商河县| 金寨县| 调兵山市| 绩溪县| 阿拉善右旗| 焉耆| 惠来县| 黑龙江省| 布拖县| 涟源市| 沙田区| 连南| 伊川县| 长岛县| 新安县|