为什么我写的代码,图片好多张重叠在一起?求大神指点

来源:2-5 onscroll事件实现瀑布流布局的图片加载功能

蒹葭苍沧

2020-01-06 10:46

window.onload=function(){

waterfall('main','box');

var dataInt={"data":[{'src':'P_00.jpg'},{'src':'P_01.jpg'},{'src':'P_02.jpg'},{'src':'P_03.jpg'}]};

window.onscroll=function(){

if(checkScrollSlide){

var oParent=document.getElementById('main');

//将数据块渲染到页面的尾部

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;

oPic.appendChild(oImg);

}

waterfall('main','box');

}

}

}


function waterfall(parent,box){

//将main下的所有class为box的元素取出.

var oParent=document.getElementById(parent);

var oBoxs=getByClass(oParent,box);

//计算整个页面显示的列数(页面宽/box的宽)

var oBoxW=oBoxs[0].offsetWidth;

//宽度=图片宽165+内边距10*2+边框宽度1*2+15

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=oBoxW*index+'px';

oBoxs[i].style.left=oBoxs[index].offsetLeft+'px';

hArr[index]+=oBoxs[i].offsetHeight;

}

}

console.log(hArr);

}


//根据class获取元素

function getByClass(parent,clsName){

var boxArr=new Array(),//用来存储获取到的所有class为box的元素

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 checkScrollSlide(){

var oParent=document.getElementById('main');

var oBoxs=getByClass(oParent,'box');

var lastBoxH=oBoxs[oBoxs.length-1].offsetTop+Math.floor(oBoxs[oBoxs.length-1].offsetHeight/2);

var scrollTop=document.body.scrollTop||document.documentElement.scrollTop;

var height=document.body.clientHeight||document.documentElement.clientHeight;

return (lastBoxH<scrollTop+height)?true:false;

}


写回答 关注

1回答

  • 蒹葭苍沧
    2020-01-06 10:49:14

    代码没问题,搞错了

瀑布流布局

瀑布流布局是网站比较流行的一种布局方式,教你实现三大方式

97759 学习 · 736 问题

查看课程

相似问题