4-4老师帮忙看下 我是跟着视频做练习 为什么最后新加的盒子会有叠加情况

4-4老师帮忙看下 我是跟着视频做练习 为什么最后新加的盒子会有叠加情况

<!DOCTYPE html>
<html>
<head>
	<link rel="stylesheet" type="text/css" href="style.css">
	<title>瀑布流实例</title>
</head>
<body>
<div id="wrap">
	<div>
		<img src="image/1.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/2.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/3.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/4.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/5.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/6.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/7.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/8.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/9.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/10.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/11.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/12.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/13.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/14.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/15.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/16.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/17.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/18.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/19.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/20.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/21.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/22.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/23.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/24.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
	<div>
		<img src="image/25.png"/>
		<a href="#">这是一段链接文字</a>
	</div>
</div>

<script type="text/javascript" src="jquery-3.3.1.js"></script>
<script type="text/javascript" src="script.js"></script>
</body>
</html>
*{
	margin: 0;
	padding: 0;
	border: none;
}

body{
	background: #ddd;
}

img {
	border: none;
}

a{
	text-decoration: none;
	color: #444;
}

a:hover{
	color: #999;
}

#wrap{
	position: relative;
	width: auto;
	height: auto;
	margin: 0 auto;
}

#wrap > div{
	float: left;
	width: 280px;
	height: auto;
	margin: 10px;
	box-sizing: border-box;
	padding: 10px;
	border-radius: 5px;
	background: #fff;
}

#wrap > div > img{
	width: 100%;
}

#wrap > div > a{
	display: block;
	font-size: 18px;
	font-weight: bold;
	line-height: 40px;
	text-align: center;
}
var data = [{
    "src":"26.png"
},{
    "src":"27.png"
},{
    "src":"28.png"
},{
    "src":"29.png"
},{
    "src":"30.png"
},{
    "src":"31.png"
},{
    "src":"32.png"
},{
    "src":"33.png"
},{
    "src":"34.png"
},{
    "src":"35.png"
},{
    "src":"36.png"
},{
    "src":"37.png"
},{
    "src":"38.png"
},{
    "src":"39.png"
},{
    "src":"40.png"
},{
    "src":"41.png"
},{
    "src":"42.png"
},{
    "src":"43.png"a
},{
    "src":"44.png"
},{
    "src":"45.png"
},{
    "src":"46.png"
}]



function waterfall(wrap,boxes){
     var boxWidth = boxes.eq(0).width() + 40;
     var windowWidth = $(window).width();
     var colsNumber = Math.floor(windowWidth/boxWidth);

     wrap.width(boxWidth * colsNumber);

     var everyHight = new Array();

     for(var i = 0; i<boxes.length; i++){
        if (i<colsNumber) {
            everyHight[i] = boxes.eq(i).height() + 40;
        }else{
            var minHeight = Math.min.apply(null,everyHight);
            var minIndex = getIndex(minHeight,everyHight);

            setStyle(boxes.eq(i),minHeight,boxes.eq(minIndex).position().left,i);
            
            everyHight[minIndex] += boxes.eq(i).height()+40;
        };
     }
}

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

};

var getStartNumber = 0;
var setStyle = function(box,top,left,index){
    if (getStartNumber >= index){
        return false;
    };
    box.css({
        'position':'absolute',
        'top': top,
        'left':left,
        'opacity':'0'
    }).stop().animate({
        'opacity':'1'
    },1000);
    getStartNumber = index;
};


var appendBox = function(wrap){
    for(i in data){
        var innerString = '<div><img src="image/' + data[i].src + '"/><a href="#">这是一段链接文字</a><div>';
         wrap.append(innerString);
    };
    waterfall(wrap,wrap.children('div'));
};

$(document).ready(function(event){
    
    
    var wrap = $('#wrap');
    var boxes = $('#wrap').children('div');
    
    waterfall(wrap,boxes);

    $(this).scroll(function(event){
        appendBox(wrap);
    });

});

http://img1.sycdn.imooc.com//climg/5af2e1580001940e11680542.jpg

新加的盒子会出现如图的叠加现象,检查了很多遍没看出原因

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
小于飞飞 2018-05-10 17:49:37

你好,重叠原因,没有指定相应对象,建议修改如下:

http://img1.sycdn.imooc.com//climg/5af415240001339f02680053.jpg

动手实践,加油!

  • 提问者 39sakuchan #1
    老师这段代码不是 setStyle函数里的吗 box是函数第一一个参数 我在给box传参时传的就是boxes.eq(i),按你的方法修改直接报错,怎么回事,感觉不是这的原因。
    2018-05-11 15:44:54
  • 小于飞飞 回复 提问者 39sakuchan #2
    在你上传代码基础上,将jquery 库改成本地测试下,考虑引用外部链接可能有延迟。 在动手实践下,加油!
    2018-05-11 19:16:54
妮可妮可妮_ 2018-05-10 09:35:46

测试了你的代码,没有出现同学所述的问题,建议使用谷歌或者火狐浏览器重新测试一下.

发现了以下问题:

  1. 模拟的数据图片打不开,建议可以使用相同的一些图片重复添加,不需要用很多张图片.

  2. http://img1.sycdn.imooc.com//climg/5af3a1380001c7e203610259.jpg在此部分所写了一个a,不知道是在书写代码的时候不小心按错了,还是粘贴的时候出现的,

可以参考下图思路修改代码:

http://img1.sycdn.imooc.com//climg/5af3a1b20001ec1306361048.jpg

如果还有其他问题,可以继续在问答区提问,主角老师会及时为你答疑解惑,祝学习愉快!

  • 提问者 39sakuchan #1
    老师 多的a是粘贴写错的 我在data里只放一张图片重复添加最后效果是对的,但data里只要超过一张就会有叠加现象。在谷歌浏览器里测试的也是这样的情况。
    2018-05-10 12:08:21
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师