瀑布流封装

来源:互联网 发布:实现即时通讯的php文件 编辑:程序博客网 时间:2024/05/29 04:39
window.onload = function  () {

waterFull('main','box');

// 模拟json数据

var dataInt={"data":[{"src":'0.jpg'},{"src":'1.jpg'},{"src":'2.jpg'},{"src":'3.jpg'},{"src":'4.jpg'}]}
window.onscroll = function  () {
if(checkScrollSide()){
for(var i=0;i<dataInt.data.length;i++){
var oParent=document.getElementById("main");
var oBox=document.createElement('div');
oBox.className='box';
oParent.appendChild(oBox);
var oPic=document.createElement('div');
oPic.className='pic';
oBox.appendChild(oPic);
var oImg=document.createElement('img');
oPic.appendChild(oImg);
oImg.src='images/'+ dataInt.data[i].src;
}
waterFull('main','box');
}
}
}


function waterFull (parent, box) {
//把父元素为main的所有子元素取出来
var oParent = document.getElementById(parent);
var oBox = getByClass(oParent,box);
//计算每一列的列数(总宽度 / 图片宽度)
var oBoxW = oBox[0].offsetWidth;//每个盒子的宽度
var cols = Math.floor(document.documentElement.clientWidth / oBoxW);
oParent.style.cssText = 'width:' + oBoxW * cols + 'px; margin: 0 auto';
//存储所有盒子的高度
var hArr=[];
for(var i=0;i<oBox.length;i++){
if(i<cols){
hArr.push(oBox[i].offsetHeight);
}else{
minH=Math.min.apply(null,hArr);
// console.log(minH);
var index=getMinhIndex(hArr,minH);
oBox[i].style.position='absolute';
oBox[i].style.top=minH+'px';
oBox[i].style.left=oBox[index].offsetLeft+'px';
hArr[index]+=oBox[i].offsetHeight;
}
}
}


function getByClass (parent,clsname) {
var boxArr = [];//用来存储获取到的所有子元素
var 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 in arr){
if(arr[i] == val){
return i;
}
}
}


function checkScrollSide () {
var oParent=document.getElementById("main")
var oBox=getByClass(oParent,'box');
var lastBoxH=oBox[oBox.length-1].offsetTop+Math.floor(oBox[oBox.length-1].offsetHeight/2);
var oscrollTop=document.body.scrollTop || document.documentElement.scrollTop;
var oclientHeight=document.body.clientHeight || document.documentElement.clientHeight;
return (lastBoxH<oscrollTop+oclientHeight)? true : false;
}
0 0