绝对定位方式的瀑布流布局:
一、布局
1、包围块框的容器:
- <div id="main">
- ... ...
- <div>
2、一个块框:
- <div class="pin">
- <div class="box">
- <img src="./images/g (1).jpg"/>
- div>
- div>
3、初始化第一行/5个块框:
- .pin{
- padding: 15px 0 0 15px;
- float: left;}
- .box{
- padding: 10px;
- border:1px solid #ccc;}
- .box img{
- width:192px;
- height:auto;}
效果:
二、思路:
1、设置父级main的样式:水平居中。
2、设置每个块框pin的样式:绝对定位。
3、设置窗口滚动事件的监听函数:读取数据添加块框。
JS实现:
1-①:获取父级oParent:
1-②:创建函数getClassObj()-通过父级id和块框类名-获取包含块框的数组。
- var oParent=document.getElementById('main');
- var aPin=getClassObj(oParent,pin);
- var num=Math.floor(document.documentElement.clientWidth/aPin[0].offsetWidth);
-
- arent.style.cssText='width:'+iPinW*num+'px;margin:0 auto;';
- function getClassObj(parent,className){
- var obj=parent.getElementsByTagName('*');
- var pinS=[];
- for (var i=0;i
- if (obj.className==className)
- pinS.push(obj);
- };
- return pinS;}
2-①:创建数组pinHArr-用于存储每一列高度;
2-②:for语句遍历每个块框aPin,将前num个块框赋值给数组pinHArr,对超出一行能容纳的块框数num的块框绝对定位。
2-③:用创建函数getminHIndex()-返回一个数组中的最小值
- var pinHArr=[];
- for(var i=0;i
- var pinH=aPin.offsetHeight;
- if(i
- pinHArr=pinH;
- }else{
- var minH=Math.min.apply(null,pinHArr);
- var minHIndex=getminHIndex(pinHArr,minH);
- aPin.style.position='absolute';
- aPin.style.top=minH+'px';
- aPin.style.left=aPin[minHIndex].offsetLeft+'px';
- pinHArr[minHIndex]+=aPin.offsetHeight;
- }
- }
- function getminHIndex(arr,minH){
- for(var i in arr){
- if(arr==minH)return i;
- }
- }
3:设置窗口滚动事件的监听函数:读取数据添加块框。
- var dataInt={'data':[{'src':'g (1).jpg'},{'src':'g (9).jpg'},{'src':'g (2).jpg'},{'src':'g (4).jpg'}]};
-
- window.onscroll=function(){
- if(checkscrollside()){
- var oParent=document.getElementById('main');
- for(var i=0;i
- var oPin=document.createElement('div');
- oPin.className='pin';
- oParent.appendChild(oPin);
- var oBox=document.createElement('div');
- oBox.className='box';
- oPin.appendChild(oBox);
- var oImg=document.createElement('img');
- oImg.src='./images/'+dataInt.data.src;
- oBox.appendChild(oImg);
- }
- waterfall('main','pin');
- };
- }
- function checkscrollside(){
- var oParent=document.getElementById('main');
- var aPin=getClassObj(oParent,'pin');
- var lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);
- var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
- var documentH=document.documentElement.clientHeight;
- return (lastPinHtrue:false;
- }
三、最终效果:
四、总结:此为让自己梳理一下思路,表达不太仔细连贯,仅供参考。
true
瀑布流布局:JS+绝对定位(1)
爱思资源网
report
44626
现在很多网站博客都流行瀑布流布局,你是否也想了解是如何实现的呢?本文将给大家详细的介绍。绝对定位方式的瀑布流布局!
|