国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

深入學習js瀑布流布局

2019-11-20 08:45:09
字體:
來源:轉載
供稿:網(wǎng)友

本文實例為大家分享了js瀑布流布局學習資料,供大家參考,具體內容如下

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

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

index.html:頁面結構    

<!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');  //模擬后臺相應數(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ù)塊渲染到當前頁面的尾部     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');//對頁面新元素進行布局渲染    }  }}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);  //設置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);//獲取當前數(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ù)組列的高度值,因為加上了一張圖片    }    //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;//混雜模式和標準模式下的scrollTop獲取  //console.log(scrollTop);  var height=document.body.clientHeight||document.documentElement.clientHeight;//混雜模式和標準模式下的瀏覽器窗口高度獲取  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ù)【窗口寬度除以一個塊框寬度】  //oParent.style.cssText='width:'+iPinW*num+'px;ma rgin:0 auto;';//設置父級居中樣式:定寬+自動水平外邊距  $( "#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 先添加進數(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)頁頂部+自身高的一半(實現(xiàn)未滾到底就開始加載)  var scrollTop = $( window ).scrollTop()//注意解決兼容性  var documentH = $( document ).height();//頁面高度  return (lastPinH < scrollTop + documentH ) ? true : false;//到達指定高度后 返回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實現(xiàn)方法比較】
--css3方式--
1:不需要計算,瀏覽器自動計算,只需設置1列寬,性能高
2:列寬隨著瀏覽器寬口大小進行改變,用戶體驗不好;
3:圖片排序按照垂直順序排列,打亂圖片顯示順序
4.圖片加載還是需要js
--js方式--
js實現(xiàn)的瀑布流不會有上面的缺點,但是性能相對要差!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大新县| 木里| 梁山县| 平顺县| 洪江市| 巧家县| 阳山县| 松桃| 杭州市| 德惠市| 遂川县| 方山县| 文登市| 舞阳县| 裕民县| 元氏县| 武邑县| 孟村| 武汉市| 蓬安县| 南漳县| 扎兰屯市| 伊宁县| 广元市| 满洲里市| 荔波县| 游戏| 三河市| 平南县| 子洲县| 牙克石市| 晋城| 建平县| 保靖县| 滨州市| 扶沟县| 长岛县| 尼勒克县| 罗定市| 会宁县| 长宁县|