4-4//boxes的再次调用,请老师检查代码

来源:4-4 数据请求检验

Golden几何

2020-10-09 06:12:24

var data=[{
 "src":"1.png",
 "title":"第一怪 竹筒当烟袋"
},{
 "src":"2.png",
 "title":"第二怪 草帽当锅盖"
},{
 "src":"3.png",
 "title":"第三怪 这边下雨那边晒"
},{
 "src":"4.png",
 "title":"第四怪 四季服装同穿戴"
},{
 "src":"5.png",
 "title":"第五怪 火车没有汽车快"
},{
 "src":"6.png",
 "title":"第六怪 火车不通国内通国外"
},{
 "src":"7.png",
 "title":"第七怪 老奶爬山比猴快"
},{
 "src":"8.png",
 "title":"第八怪 鞋子后面多一块"
},{
 "src":"9.png",
 "title":"第九怪 脚趾四季露在外"
},{
 "src":"10.png",
 "title":"第十怪 鸡蛋栓着卖"
},{
 "src":"11.png",
 "title":"第十一怪 粑粑叫饵块"
},{
 "src":"12.png",
 "title":"第十二怪 花生蚕豆数着卖"
},{
 "src":"13.png",
 "title":"第十三怪 三个蚊子一盘菜"
},{
 "src":"14.png",
 "title":"第十四怪 四个老鼠一麻袋"
},{
 "src":"15.png",
 "title":"第十五怪 树上松毛扭着卖"
},{
 "src":"16.png",
 "title":"第十六怪 姑娘叫老太"
},{
 "src":"17.png",
 "title":"第十七怪 小和尚可以谈恋爱"
},{
 "src":"18.png",
 "title":"第十八怪 背着娃娃谈恋爱"
}];

var waterfall=function(wrap,boxes){
 var boxWidth=boxes.eq(0).width()+40;
 var windowWidth=$(window).width();
 var colsNumber=Math.floor(windowWidth/boxWidth);
 wrap.width(boxWidth*colsNumber);
 var everyHeight=new Array();
 for(var i=0;i<boxes.length;i++){
  if(i<colsNumber){
   everyHeight[i]=boxes.eq(i).height()+40;
  }else{
   var minHeight=Math.min.apply(null,everyHeight);
   var minIndex=getIndex(minHeight,everyHeight);
   boxes.eq(i).css({
    'position':'absolute',
    'top':minHeight,
    'left':boxes.eq(minIndex).position().left,
    'opacity':'0'
   }).stop().animate({
    'opacity':'1'
   },1000);
   everyHeight[minIndex]+=boxes.eq(i).height()+40;
  }
 }
}


function getIndex(minHeight,everyHeight){
 for(index in everyHeight){
  if(everyHeight[index]==minHeight){
   return index;
  }
 }
}


//

//检测结果出现所有盒子(len>18)opacity为0的闪现
//追加数据检测
var getCheck=function(wrap){
 var documentHeight=$(window).height();
 var scrollHeight=$(window).scrollTop();
 var boxes=$('#wrap').children('div');//这里为什么不能直接调用boxes呢,因为虚拟数据吗
 var lastBoxTop=boxes.eq(boxes.length-1).offset().top;
 var lastHeight=boxes.eq(boxes.length-1).height()+20;
 var lastColHeight=lastBoxTop+lastHeight;
 return documentHeight+scrollHeight>=lastColHeight?true:false;
}


//追加的盒子函数
var appendBox=function(wrap){
 if(getCheck(wrap)){
 for(i in data){
 var innerString='<div><img src="images/'+data[i].src+'"><a href="http://www.imooc.com" target="_blank">'+data[i].title+'</a></div>';
 wrap.append(innerString);
 }
 }else{
 return false;
 }
 waterfall(wrap,wrap.children('div'));//为什么在这里调用呢?
}

$(document).ready(function(event){
 var wrap=$('#wrap');
 var boxes=$('#wrap').children('div');//这里为什么不直接用wrap,为了快捷吗?
 waterfall(wrap,boxes);
 $(this).scroll(function(event){
 appendBox(wrap,boxes);
 });
});


写回答

2回答

好帮手慕星星

2020-10-09

同学你好,代码实现效果没有问题,很棒!

针对提问问题解答如下:

1、这里是因为div小盒子数量在不断变化,不能使用一开始获取的内容

http://img.mukewang.com/climg/5f8008880924795c07030024.jpg

使用的时候需要再次获取。

2、两种方式都可以

http://img.mukewang.com/climg/5f800800095ffe0706290109.jpg

3、这里调用是追加盒子之后进行排列布局,而不是追加进去挨着放置就可以了

http://img.mukewang.com/climg/5f800672091d1ed905240093.jpg

4、20是上下padding的和,因为获取的height高度是内容高度,不包括padding值。

‘20是小于滚动的最大值吗?’不太明白想要表达的意思,建议描述具体一些。

5、不写 return false;从效果上看没问题,只不过waterfall方法每一次都要执行,浪费时间。因为在else的时候可以不执行。

自己再测试理解下,祝学习愉快!

1
holden几何
h 第4点是说lastColHeight的值。 第5点因为注释掉一个括号了,导致报错,已经好了。
h020-10-09
共1条回复

Golden几何

提问者

2020-10-09

抱歉忘记看4-3了,请问:

lastHeight+20是加上margin-top和padding-top,并且20是小于滚动的最大值吗?

var appendBox=function(wrap){
 if(getCheck(wrap)){
 for(i in data){
 var innerString='<div><img src="images/'+data[i].src+'"><a href="http://www.imooc.com" target="_blank">'+data[i].title+'</a></div>';
 wrap.append(innerString);
 }
 }else{
 return false;
 }
waterfall(wrap,wrap.children('div'));//这里不(return false)继续调用会怎么样呢?
}

0

0 学习 · 36712 问题

查看课程