3-5随堂练习问题
来源:3-3 使用Jquery完成定位布局
Aaashin3775583
2017-08-04 13:58:05
<!DOCTYPE html>
<html>
<head>
<title>瀑布流</title>
<meta charset="utf-8">
<title>瀑布流-云南十八怪</title>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>
<style type="text/css">
*{margin: 0;padding: 0;border: 0;}
body{background-color: #ddd;}
img{border: 0}
a{text-decoration: none;color: #444;}
a:hover{color: #999;}
.waterfall-wrap{
width: auto;
height: auto;
margin: 0 auto;
position: relative;
}
.waterfall-wrap>div{
float: left;
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
width: 280px;
height: auto;
margin: 10px;
padding: 10px;
background-color: #fff;
border-radius: 5px;
}
.waterfall-wrap>div>img{width: 100%;}
.waterfall-wrap>div>a{
display: block;
text-align:center;
font-size: 18px;
font-weight: bold;
line-height: 40px;
}
</style>
</head>
<body>
<div id="waterfall-wrap" class="waterfall-wrap">
<div>
<img src="img/1.png">
<a href="http://www.imooc.com" target="_blank">第一怪 竹筒当烟袋</a>
</div>
<div>
<img src="img/2.png">
<a href="http://www.imooc.com" target="_blank">第二怪 草帽当锅盖</a>
</div>
<div>
<img src="img/3.png">
<a href="http://www.imooc.com" target="_blank">第三怪 这边下雨那边晒</a>
</div>
<div>
<img src="img/4.png">
<a href="http://www.imooc.com" target="_blank">第四怪 四季服装同穿戴</a>
</div>
<div>
<img src="img/5.png">
<a href="http://www.imooc.com" target="_blank">第五怪 火车没有汽车快</a>
</div>
<div>
<img src="img/6.png">
<a href="http://www.imooc.com" target="_blank">第六怪 火车不通国内通国外</a>
</div>
<div>
<img src="img/7.png">
<a href="http://www.imooc.com" target="_blank">第七怪 老奶爬山比猴快</a>
</div>
<div>
<img src="img/8.png">
<a href="http://www.imooc.com" target="_blank">第八怪 鞋子后面多一块</a>
</div>
<div>
<img src="img/9.png">
<a href="http://www.imooc.com" target="_blank">第九怪 脚趾四季露在外</a>
</div>
<div>
<img src="img/10.png">
<a href="http://www.imooc.com" target="_blank">第十怪 鸡蛋拴着卖</a>
</div>
<div>
<img src="img/11.png">
<a href="http://www.imooc.com" target="_blank">第十一怪 粑粑叫饵块</a>
</div>
<div>
<img src="img/12.png">
<a href="http://www.imooc.com" target="_blank">第十二怪 花生蚕豆数着卖</a>
</div>
<div>
<img src="img/13.png">
<a href="http://www.imooc.com" target="_blank">第十三怪 三个蚊子一盘菜</a>
</div>
<div>
<img src="img/14.png">
<a href="http://www.imooc.com" target="_blank">第十四怪 四个老鼠一麻袋</a>
</div>
<div>
<img src="img/15.png">
<a href="http://www.imooc.com" target="_blank">第十五怪 树上松毛扭着卖</a>
</div>
<div>
<img src="img/16.png">
<a href="http://www.imooc.com" target="_blank">第十六怪 姑娘叫老太</a>
</div>
<div>
<img src="img/17.png">
<a href="http://www.imooc.com" target="_blank">第十七怪 小和尚可以谈恋爱</a>
</div>
<div>
<img src="img/18.png">
<a href="http://www.imooc.com" target="_blank">第十八怪 背着娃娃谈恋爱</a>
</div>
</div>
</body>
<script>
$(function(){
var fallwrap=$('#waterfall-wrap');
var boxes=fallwrap.children('div');//children() 方法返回返回被选元素的所有直接子元素。
waterfallFun(fallwrap,boxes);
function waterfallFun(wrap,boxes){
var boxWidth=boxes.eq(0).width()+40;
var windowWidth=$(window).width();
var colsNumber=Math.floor(windowWidth/boxWidth)
// 设置容器的宽度
wrap.width(boxWidth*colsNumber);
// 定义一个数组并存储每一列的高度
var everyH=new Array();
for(var i=0;i<boxes.length;i++){
if(i<colsNumber){
everyH[i]=boxes.eq(i).height+40;
}else{
var minH=Math.min.apply(null,everyH);
// console.log(minH)
var minIndex=getMinIndex(minH,everyH);
boxes.eq(i).css({
"position":"absolute",
"top":minH,
"left":boxes.eq(minIndex).position().left
})
everyH[minIndex]+=boxes.eq(i).height()+40;
}
}
}
// 获取最小列的索引
function getMinIndex(minH,everyH){
for(index in everyH){
if(everyH[index] == minH){
console.log(1)
return index;
};
};
};
})
</script>
</html>问题:报错说 Cannot read property 'left' of undefined,自己在控制台打印minH值为NAN,不知道问题在哪,感觉参数传的没问题,求帮解决!
附:代码除了图片全都在上面了
附:报错问题:

4回答
好帮手慕糖
2017-08-07
你好,这个应该跟逻辑没什么关系,就算放在下面,我这里多刷几次,也会出错,建议:再将老师的代码好好看下。祝学习愉快!
Aaashin3775583
提问者
2017-08-06
<!DOCTYPE html>
<html>
<head>
<title>瀑布流</title>
<meta charset="utf-8">
<title>瀑布流-云南十八怪</title>
<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>
<style type="text/css">
*{margin: 0;padding: 0;border: 0;}
body{background-color: #ddd;}
img{border: 0}
a{text-decoration: none;color: #444;}
a:hover{color: #999;}
.waterfall-wrap{
width: auto;
height: auto;
margin: 0 auto;
position: relative;
}
.waterfall-wrap>div{
float: left;
box-sizing:border-box;
-moz-box-sizing:border-box;
-webkit-box-sizing:border-box;
width: 280px;
height: auto;
margin: 10px;
padding: 10px;
background-color: #fff;
border-radius: 5px;
}
.waterfall-wrap>div>img{width: 100%;}
.waterfall-wrap>div>a{
display: block;
text-align:center;
font-size: 18px;
font-weight: bold;
line-height: 40px;
}
</style>
<script>
$(function(){
var fallwrap=$('#waterfall-wrap');
var boxes=fallwrap.children('div');//children() 方法返回返回被选元素的所有直接子元素。
waterfallFun(fallwrap,boxes);
function waterfallFun(wrap,boxes){
var boxWidth=boxes.eq(0).width()+40;
var windowWidth=$(window).width();
var colsNumber=Math.floor(windowWidth/boxWidth)
// 设置容器的宽度
wrap.width(boxWidth*colsNumber);
// 定义一个数组并存储每一列的高度
var everyH=new Array();
for(var i=0;i<boxes.length;i++){
if(i<colsNumber){
everyH[i]=boxes.eq(i).height()+40;
}else{
var minH=Math.min.apply(null,everyH);
// console.log(minH)
var minIndex=getMinIndex(minH,everyH);
boxes.eq(i).css({
"position":"absolute",
"top":minH,
"left":boxes.eq(minIndex).position().left
})
everyH[minIndex]+=boxes.eq(i).height()+40;
}
}
}
// 获取最小列的索引
function getMinIndex(minH,everyH){
for(index in everyH){
if(everyH[index] == minH){
console.log(1)
return index;
};
};
};
})
</script>
</head>
<body>
<div id="waterfall-wrap" class="waterfall-wrap">
<div>
<img src="img/1.png">
<a href="http://www.imooc.com" target="_blank">第一怪 竹筒当烟袋</a>
</div>
<div>
<img src="img/2.png">
<a href="http://www.imooc.com" target="_blank">第二怪 草帽当锅盖</a>
</div>
<div>
<img src="img/3.png">
<a href="http://www.imooc.com" target="_blank">第三怪 这边下雨那边晒</a>
</div>
<div>
<img src="img/4.png">
<a href="http://www.imooc.com" target="_blank">第四怪 四季服装同穿戴</a>
</div>
<div>
<img src="img/5.png">
<a href="http://www.imooc.com" target="_blank">第五怪 火车没有汽车快</a>
</div>
<div>
<img src="img/6.png">
<a href="http://www.imooc.com" target="_blank">第六怪 火车不通国内通国外</a>
</div>
<div>
<img src="img/7.png">
<a href="http://www.imooc.com" target="_blank">第七怪 老奶爬山比猴快</a>
</div>
<div>
<img src="img/8.png">
<a href="http://www.imooc.com" target="_blank">第八怪 鞋子后面多一块</a>
</div>
<div>
<img src="img/9.png">
<a href="http://www.imooc.com" target="_blank">第九怪 脚趾四季露在外</a>
</div>
<div>
<img src="img/10.png">
<a href="http://www.imooc.com" target="_blank">第十怪 鸡蛋拴着卖</a>
</div>
<div>
<img src="img/11.png">
<a href="http://www.imooc.com" target="_blank">第十一怪 粑粑叫饵块</a>
</div>
<div>
<img src="img/12.png">
<a href="http://www.imooc.com" target="_blank">第十二怪 花生蚕豆数着卖</a>
</div>
<div>
<img src="img/13.png">
<a href="http://www.imooc.com" target="_blank">第十三怪 三个蚊子一盘菜</a>
</div>
<div>
<img src="img/14.png">
<a href="http://www.imooc.com" target="_blank">第十四怪 四个老鼠一麻袋</a>
</div>
<div>
<img src="img/15.png">
<a href="http://www.imooc.com" target="_blank">第十五怪 树上松毛扭着卖</a>
</div>
<div>
<img src="img/16.png">
<a href="http://www.imooc.com" target="_blank">第十六怪 姑娘叫老太</a>
</div>
<div>
<img src="img/17.png">
<a href="http://www.imooc.com" target="_blank">第十七怪 小和尚可以谈恋爱</a>
</div>
<div>
<img src="img/18.png">
<a href="http://www.imooc.com" target="_blank">第十八怪 背着娃娃谈恋爱</a>
</div>
</div>
</body>
</html>将脚本放在头部head里面,第一次刷新没问题;但第二次刷新就有问题,图片显示如下:

好帮手慕糖
2017-08-06
你好,经测试是没有问题的哟,请确认是否放置在<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>文件下面。祝学习愉快!
好帮手慕糖
2017-08-04
你好,代码135行everyH[i]=boxes.eq(i).height+40;中height是个方法,应该是height();祝学习愉快!
相似问题