日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
瀑布流布局:JS+絕對定位

絕對定位方式的瀑布流布局:

玉屏ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

一、布局

1、包圍塊框的容器:

 
 
 
 
  1.     ... ...

2、一個塊框:

 
 
 
 
  1.     
  2.         
  3.     
  • 3、初始化第一行/5個塊框:

     
     
     
     
    1. .pin{
    2.         padding: 15px 0 0 15px;
    3.         float: left;}
    4.     .box{
    5.         padding: 10px;
    6.         border:1px solid #ccc;}
    7.     .box img{
    8.         width:192px;
    9.         height:auto;}

    效果:

    二、思路:

    1、設(shè)置父級main的樣式:水平居中。

    2、設(shè)置每個塊框pin的樣式:絕對定位。

    3、設(shè)置窗口滾動事件的監(jiān)聽函數(shù):讀取數(shù)據(jù)添加塊框。

    JS實(shí)現(xiàn):

    1-①:獲取父級oParent:

    1-②:創(chuàng)建函數(shù)getClassObj()-通過父級id和塊框類名-獲取包含塊框的數(shù)組。

     
     
     
     
    1. var oParent=document.getElementById('main');// 父級對象
    2. var aPin=getClassObj(oParent,pin);// 獲取存儲塊框pin的數(shù)組aPin
    3. var num=Math.floor(document.documentElement.clientWidth/aPin[0].offsetWidth);//獲取-每行中能容納的塊框個數(shù)-num【窗口寬度除以一個塊框?qū)挾取?
    4. arent.style.cssText='width:'+iPinW*num+'px;margin:0 auto;';//用cssText屬性為父級main添加居中樣式:定寬+自動水平外邊距
     
     
     
     
    1. function getClassObj(parent,className){
    2.         var obj=parent.getElementsByTagName('*');//獲取 父級的所有子集
    3.         var pinS=[];//創(chuàng)建一個數(shù)組 用于存儲類為className的元素
    4.         for (var i=0;i
    5.             if (obj[i].className==className)
    6.                 pinS.push(obj[i]);
    7.         };
    8.         return pinS;}

    2-①:創(chuàng)建數(shù)組pinHArr-用于存儲每一列高度;

    2-②:for語句遍歷每個塊框aPin[i],將前num個塊框賦值給數(shù)組pinHArr,對超出一行能容納的塊框數(shù)num的塊框絕對定位。

    2-③:用創(chuàng)建函數(shù)getminHIndex()-返回一個數(shù)組中的最小值

     
     
     
     
    1. var pinHArr=[];//用于存儲 每列中的所有塊框相加的高度【隨著列數(shù)的不同此數(shù)組的length也隨之改變】
    2.     for(var i=0;i
    3.         var pinH=aPin[i].offsetHeight;//獲取數(shù)組aPin的第i個塊框的可見寬offsetHeight
    4.         if(i
    5.             pinHArr[i]=pinH; //第一行中的num個塊框aPin 先添加進(jìn)數(shù)組pinHArr
    6.         }else{
    7.             var minH=Math.min.apply(null,pinHArr);//計算數(shù)組pinHArr中的最小值minH
    8.             var minHIndex=getminHIndex(pinHArr,minH);//通過創(chuàng)建的getminHIndex()-獲取最小值minH在數(shù)組pinHArr中的索引minHIndex
    9.             aPin[i].style.position='absolute';//設(shè)置絕對位移
    10.             aPin[i].style.top=minH+'px';
    11.             aPin[i].style.left=aPin[minHIndex].offsetLeft+'px';//數(shù)組 最小高元素的高 + 添加上的aPin[i]塊框高
    12.             pinHArr[minHIndex]+=aPin[i].offsetHeight;//更新添加塊框后的列高
    13.         }
    14.     }
     
     
     
     
    1. function getminHIndex(arr,minH){
    2.     for(var i in arr){
    3.         if(arr[i]==minH)return i;
    4.     }
    5. }

    3:設(shè)置窗口滾動事件的監(jiān)聽函數(shù):讀取數(shù)據(jù)添加塊框。

     
     
     
     
    1. var dataInt={'data':[{'src':'g (1).jpg'},{'src':'g (9).jpg'},{'src':'g (2).jpg'},{'src':'g (4).jpg'}]};//一個臨時的數(shù)據(jù)對象
    2.     //下面定義窗口滾動事件監(jiān)聽函數(shù)
    3.     window.onscroll=function(){
    4.         if(checkscrollside()){
    5.         var oParent=document.getElementById('main');// 父級對象
    6.         for(var i=0;i
    7.             var oPin=document.createElement('div'); //創(chuàng)建添加 元素節(jié)點(diǎn)pin
    8.             oPin.className='pin';                   //添加 類名 name屬性
    9.             oParent.appendChild(oPin);              //創(chuàng)建添加 子節(jié)點(diǎn)box
    10.             var oBox=document.createElement('div');
    11.             oBox.className='box';
    12.             oPin.appendChild(oBox);
    13.             var oImg=document.createElement('img');//創(chuàng)建添加 子節(jié)點(diǎn)img
    14.             oImg.src='./images/'+dataInt.data[i].src;
    15.             oBox.appendChild(oImg);
    16.         }
    17.         waterfall('main','pin');//將①②封裝成函數(shù)waterfall(),將添加的節(jié)點(diǎn)添加到添加和定位到文檔中。
    18.         };
    19.     }
     
     
     
     
    1. function checkscrollside(){
    2.         var oParent=document.getElementById('main');
    3.         var aPin=getClassObj(oParent,'pin');
    4.         var lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);//創(chuàng)建【觸發(fā)添加塊框函數(shù)waterfall()】的高度:最后一個塊框的距離網(wǎng)頁頂部+自身高的一半(實(shí)現(xiàn)未滾到底就開始加載)
    5.         var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//注意解決兼容性
    6.         var documentH=document.documentElement.clientHeight;//窗口高度
    7.         return (lastPinH
    8.     }

    三、最終效果:

    四、總結(jié):此為讓自己梳理一下思路,表達(dá)不太仔細(xì)連貫,僅供參考。

    #p#

    五、完成后的html文件和js文件:

    html:index.html

     
     
     
     
    1.  
    2.  
    3.  
    4.  
    5.  
    6.  
    7.  
    8.  
    9.      *{padding: 0;margin:0;}
    10.      #main{
    11.          position: relative;
    12.      }
    13.      .pin{
    14.          padding: 15px 0 0 15px;
    15.          float:left;
    16.      }
    17.      .box{
    18.          padding: 10px;
    19.          border:1px solid #ccc;
    20.          box-shadow: 0 0 6px #ccc;
    21.          border-radius: 5px;
    22.      }
    23.      .box img{
    24.          width:162px;
    25.          height:auto;
    26.      }
    27.  
    28.  
    29.  
    30.  
    31.      
    32.          
    33.              
    34.          
  •      
  •      
  •          
  •              
  •          
  •      
  •      
  •          
  •              
  •          
  •      
  •      
  •          
  •              
  •          
  •      
  •      
  •          
  •              
  •          
  •      
  •  
  •  
  •  
  • js:waterfall.js

     
     
     
     
    1. window.onload=function(){
    2. waterfall('main','pin');
    3.      var dataInt={'data':[{'src':'g (1).jpg'},{'src':'g (9).jpg'},{'src':'g (2).jpg'},{'src':'g (4).jpg'}]};
    4.      
    5.      window.onscroll=function(){
    6.          if(checkscrollside()){
    7.          var oParent=document.getElementById('main');// 父級對象
    8.          for(var i=0;i
    9.              var oPin=document.createElement('div'); //添加 元素節(jié)點(diǎn)
    10.              oPin.className='pin';                   //添加 類名 name屬性
    11.              oParent.appendChild(oPin);              //添加 子節(jié)點(diǎn)
    12.              var oBox=document.createElement('div');
    13.              oBox.className='box';
    14.              oPin.appendChild(oBox);
    15.              var oImg=document.createElement('img');
    16.              oImg.src='./images/'+dataInt.data[i].src;
    17.              oBox.appendChild(oImg);
    18.          }
    19.          waterfall('main','pin');
    20.          };
    21.      }
    22.      
    23.  }
    24.  /*
    25.          parend 父級id
    26.          pin 元素id
    27.  */
    28.  function waterfall(parent,pin){
    29.      var oParent=document.getElementById(parent);// 父級對象
    30.      var aPin=getClassObj(oParent,pin);// 獲取存儲塊框pin的數(shù)組aPin
    31.      var iPinW=aPin[0].offsetWidth;// 一個塊框pin的寬
    32.      var num=Math.floor(document.documentElement.clientWidth/iPinW);//每行中能容納的pin個數(shù)【窗口寬度除以一個塊框?qū)挾取?
    33.      oParent.style.cssText='width:'+iPinW*num+'px;ma rgin:0 auto;';//設(shè)置父級居中樣式:定寬+自動水平外邊距
    34.  
    35.      var pinHArr=[];//用于存儲 每列中的所有塊框相加的高度。
    36.      for(var i=0;i
    37.          var pinH=aPin[i].offsetHeight;
    38.          if(i
    39.              pinHArr[i]=pinH; //第一行中的num個塊框pin 先添加進(jìn)數(shù)組pinHArr
    40.          }else{
    41.              var minH=Math.min.apply(null,pinHArr);//數(shù)組pinHArr中的最小值minH
    42.              var minHIndex=getminHIndex(pinHArr,minH);
    43.              aPin[i].style.position='absolute';//設(shè)置絕對位移
    44.              aPin[i].style.top=minH+'px';
    45.              aPin[i].style.left=aPin[minHIndex].offsetLeft+'px';
    46.              //數(shù)組 最小高元素的高 + 添加上的aPin[i]塊框高
    47.              pinHArr[minHIndex]+=aPin[i].offsetHeight;//更新添加了塊框后的列高
    48.          }
    49.      }
    50.  }
    51.      /****
    52.          *通過父級和子元素的class類 獲取該同類子元素的數(shù)組
    53.          */
    54.      function getClassObj(parent,className){
    55.          var obj=parent.getElementsByTagName('*');//獲取 父級的所有子集
    56.          var pinS=[];//創(chuàng)建一個數(shù)組 用于收集子元素
    57.          for (var i=0;i
    58.              if (obj[i].className==className){
    59.                  pinS.push(obj[i]);
    60.              }
    61.          };
    62.          return pinS;
    63.      }
    64.      /****
    65.          *獲取 pin高度 最小值的索引index
    66.          */
    67.      function getminHIndex(arr,minH){
    68.          for(var i in arr){
    69.              if(arr[i]==minH){
    70.                  return i;
    71.              }
    72.          }
    73.      }
    74.  
    75.  
    76.      function checkscrollside(){
    77.          var oParent=document.getElementById('main');
    78.          var aPin=getClassObj(oParent,'pin');
    79.          var lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);//創(chuàng)建【觸發(fā)添加塊框函數(shù)waterfall()】的高度:最后一個塊框的距離網(wǎng)頁頂部+自身高的一半(實(shí)現(xiàn)未滾到底就開始加載)
    80.          var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//注意解決兼容性
    81.          var documentH=document.documentElement.clientHeight;//頁面高度
    82.          return (lastPinH
    83.      }

    新聞名稱:瀑布流布局:JS+絕對定位
    標(biāo)題鏈接:http://www.5511xx.com/article/dhjeghj.html

    其他資訊