瀑布流布局:JS+绝对定位(2)

导语 现在很多网站博客都流行瀑布流布局,你是否也想了解是如何实现的呢?本文将给大家详细的介绍。瀑布流布局!

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

html:index.html


  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  2.  <html xmlns="https://www.w3.org/1999/xhtml"> 
  3.  <head> 
  4.  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
  5.  <meta name="anchor" content="who care?" /> 
  6.  <script type="text/javascript" src="waterfall.js"/></script> 
  7.    
  8.  <title></title> 
  9.  <style type="text/css"> 
  10.      *{padding: 0;margin:0;}  
  11.      #main{  
  12.          position: relative;  
  13.      }  
  14.      .pin{  
  15.          padding: 15px 0 0 15px;  
  16.          float:left;  
  17.      }  
  18.      .box{  
  19.          padding: 10px;  
  20.          border:1px solid #ccc;  
  21.          box-shadow: 0 0 6px #ccc;  
  22.          border-radius: 5px;  
  23.      }  
  24.      .box img{  
  25.          width:162px;  
  26.          height:auto;  
  27.      }  
  28.  </style> 
  29.  </head> 
  30.  <body> 
  31.  <div id="main"> 
  32.      <div class="pin"> 
  33.          <div class="box"> 
  34.              <img src="./images/g (1).jpg"/> 
  35.          </div> 
  36.      </div> 
  37.      <div class="pin"> 
  38.          <div class="box"> 
  39.              <img src="./images/g (2).jpg"/> 
  40.          </div> 
  41.      </div> 
  42.      <div class="pin"> 
  43.          <div class="box"> 
  44.              <img src="./images/g (3).jpg"/> 
  45.          </div> 
  46.      </div> 
  47.      <div class="pin"> 
  48.          <div class="box"> 
  49.              <img src="./images/g (4).jpg"/> 
  50.          </div> 
  51.      </div> 
  52.      <div class="pin"> 
  53.          <div class="box"> 
  54.              <img src="./images/g (5).jpg"/> 
  55.          </div> 
  56.      </div> 
  57.  </div> 
  58.  </body> 
  59.  </html> 

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<dataInt.data.length;i++){  
  9.              var oPin=document.createElement('div'); //添加 元素节点  
  10.              oPin.className='pin';                   //添加 类名 name属性  
  11.              oParent.appendChild(oPin);              //添加 子节点  
  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的数组aPin  
  31.      var iPinW=aPin[0].offsetWidth;// 一个块框pin的宽  
  32.      var num=Math.floor(document.documentElement.clientWidth/iPinW);//每行中能容纳的pin个数【窗口宽度除以一个块框宽度】  
  33.      oParent.style.cssText='width:'+iPinW*num+'px;ma rgin:0 auto;';//设置父级居中样式:定宽+自动水平外边距  
  34.    
  35.      var pinHArr=[];//用于存储 每列中的所有块框相加的高度。  
  36.      for(var i=0;i<aPin.length;i++){//遍历数组aPin的每个块框元素  
  37.          var pinH=aPin[i].offsetHeight;  
  38.          if(i<num){  
  39.              pinHArr[i]=pinH; //第一行中的num个块框pin 先添加进数组pinHArr  
  40.          }else{  
  41.              var minH=Math.min.apply(null,pinHArr);//数组pinHArr中的最小值minH  
  42.              var minHIndex=getminHIndex(pinHArr,minH);  
  43.              aPin[i].style.position='absolute';//设置绝对位移  
  44.              aPin[i].style.top=minH+'px';  
  45.              aPin[i].style.left=aPin[minHIndex].offsetLeft+'px';  
  46.              //数组 最小高元素的高 + 添加上的aPin[i]块框高  
  47.              pinHArr[minHIndex]+=aPin[i].offsetHeight;//更新添加了块框后的列高  
  48.          }  
  49.      }  
  50.  }  
  51.      /****
  52.          *通过父级和子元素的class类 获取该同类子元素的数组  
  53.          */ 
  54.      function getClassObj(parent,className){  
  55.          var obj=parent.getElementsByTagName('*');//获取 父级的所有子集  
  56.          var pinS=[];//创建一个数组 用于收集子元素  
  57.          for (var i=0;i<obj.length;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);//创建【触发添加块框函数waterfall()】的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载)  
  80.          var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//注意解决兼容性  
  81.          var documentH=document.documentElement.clientHeight;//页面高度  
  82.          return (lastPinH<scrollTop+documentH)?true:false;//到达指定高度后 返回true,触发waterfall()函数  
  83.      } 

原文链接:

https://www.nucmc.com/ true 瀑布流布局:JS+绝对定位(2) https://www.nucmc.com/show-11-27-1.html report 74327 现在很多网站博客都流行瀑布流布局,你是否也想了解是如何实现的呢?本文将给大家详细的介绍。瀑布流布局!
TAG:瀑布 布局 绝对 JS
本站欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明: 文章转载自:BETWAY官网网 https://www.nucmc.com/show-11-27-1.html
BETWAY官网网 Copyright 2012-2014 www.nucmc.com All rights reserved.(晋ICP备13001436号-1)