暂无描述

waterfull.js 2.7KB

    window.onload = function(){ var oParent = document.getElementById('main'); waterFall(oParent); window.onscroll = function(){ if(checkLoad()){ // 将数据渲染到页面里 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 oImg = document.createElement('img'); oImg.src = 'images/'+dataInt.data[i].src; oImg.style.cssText = 'transform: scale(0);'; oImg.onload = function(){ this.style.cssText = 'transform: scale(1);transition: transform 1s .5s;' } oPic.appendChild(oImg); } waterFall(oParent); } } window.onresize = function(){ waterFall(oParent); } } function waterFall(oParent){ var oBox = getClsName('box'); // 计算整个页面的列数 var oBoxW = oBox[0].offsetWidth; var paddingLeft = parseInt(getAttr(oBox[0],'paddingLeft')); var cols = Math.floor(document.documentElement.clientWidth / oBoxW); // 设置main的属性 oParent.style.cssText = 'width:'+oBoxW*cols+'px;margin:0 auto;left:'+(-paddingLeft/2)+'px'; // 存取每列的高度 var hArr = []; for(var i=0;i<oBox.length;i++){ if(i<cols){// 如果i < cols 说明是前六个box的高度 hArr.push(oBox[i].offsetHeight); oBox[i].style.cssText='position:absolute;top:0px;left:'+oBoxW*i+'px;'; }else{ // i>cols存取每列的高度 var minH = Math.min.apply(null,hArr); var index = getMinHIndex(hArr,minH); oBox[i].style.cssText='position:absolute;top:'+minH+'px;left:'+oBoxW*index+'px;'; hArr[index] += oBox[i].offsetHeight; } } } // 选择出class为box的 元素 function getClsName(cls){ var eles = document.getElementsByTagName('*'); var curEle = []; for(var i=0;i<eles.length;i++){ if(eles[i].className == cls){ curEle.push(eles[i]); } } return curEle; } // 获取元素的样式 function getAttr(obj,attr){ return window.getComputedStyle?window.getComputedStyle(obj,null)[attr]:obj.currentStyle[attr]; } // 获取最小值的索引 function getMinHIndex(arr,val){ for(var i in arr){ if(arr[i] == val){ return i; } } } // 检测是否具备加载条件 function checkLoad(){ var oBox = getClsName('box'); var lastBoxH = oBox[oBox.length-1].offsetTop; var scrollTop = document.body.scrollTop || document.documentElement.scrollTop; var pageH = document.body.clientHeight|| document.documentElement.clientHeight; return (lastBoxH < scrollTop + pageH)?true:false; // var lastBoxH = oBox[oBox.length-1].offsetTop+Math.floor(oBox[oBox.length-1].offsetTop/2); }