onscroll一点时,为什么json中要加载的几张图片重叠在一起,继续滚动又正常显示了?
如题。还有我换了几张图片后又没有这个问题了
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>js_瀑布流</title> <style type="text/css"> *{ margin: 0; padding: 0; } #main{ position: relative; } .box{ padding-left: 15px; padding-bottom: 15px; float: left; } .pic{ padding: 10px; border:1px solid #ccc; border-radius: 5px; box-shadow: 0 0 5px #ccc; } img{ width: 200px; } </style> <script type="text/javascript"> var stop=false; window.onload=function(){ waterfall('main','box'); window.onscroll=function(){ if(checkScroll()){ loadImg(); } } } function waterfall(parent,box){ //将main下的所有class为box的元素取出来 var oParent=document.getElementById(parent); var oBoxs=getByClass(oParent,box); //计算整个页面的列数 var oBoxW=oBoxs[0].offsetWidth; var cols=Math.floor(document.documentElement.clientWidth/oBoxW); //设置main的宽度 oParent.style.cssText='width:'+oBoxW*cols+'px;margin:0 auto'; //存放每一列高度的数组 var harr=[]; for(var i=0;i<oBoxs.length;i++){ if(i<cols){ harr.push(oBoxs[i].offsetHeight); }else{ var minH=Math.min.apply(null,harr); var index=getMinhIndex(harr,minH); oBoxs[i].style.position='absolute'; oBoxs[i].style.top=minH+'px'; oBoxs[i].style.left=oBoxs[index].offsetWidth*index+'px'; //改变数组 harr[index]+=oBoxs[i].offsetHeight; } console.log(oBoxs.length) } console.log(harr); } //根据class获取元素 //获取parent下的所有元素,比较其class是否是box function getByClass(parent,clsname){ var boxArr=new Array(); 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=0;i<arr.length;i++){ if(arr[i]==val){ return i; } } } function checkScroll(){ var oParent=document.getElementById('main'); var oBoxs=getByClass(oParent,'box'); var lastBox=oBoxs[oBoxs.length-1]; // console.log(oBoxs instanceof Array); var lastScrollTop=lastBox.offsetTop+Math.floor(lastBox.offsetHeight/2); var scrollTop=document.body.scrollTop||document.documentElement.scrollTop; var height=document.body.clientHeight||document.documentElement.clientHeight; return (lastScrollTop<height+scrollTop)?true:false; } function loadImg(){ var dataObj={'data':[{'src':'../img/img8.jpeg'},{'src':'../img/img9.jpeg'},{'src':'../img/img10.jpeg'}]}; var oParent=document.getElementById('main'); for(var i=0;i<dataObj.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=dataObj.data[i].src; oPic.appendChild(oImg); } waterfall('main','box'); } </script> </head> <body> <div id="main"> <div class="box"> <div class="pic"> <img src="../img/img1.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img2.png"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img3.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img4.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img5.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img6.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img7.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img1.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img2.png"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img3.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img4.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img5.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img6.jpeg"> </div> </div> <div class="box"> <div class="pic"> <img src="../img/img7.jpeg"> </div> </div> </div> </body> </html>