我也出现了叠加问题,而且每次刷新叠加的情况都不一样
看了看评论似乎有人跟我出现了一样的问题。。。然而我现在也还没排查出来。已经出现的问题是叠加的图块高度是40. 另外我这个代码报错,说wrap未定义,可是我直接传参进去的。这个就很奇怪了。唉,麻烦老师帮我看看了
//模拟数据
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) {
//获取屏幕可以显示的列数,调整容器的宽度m
var boxWidth = boxes.eq(0).width() + 40;//内容的宽度
var windowWidth = $(window).width();
var colsNumber = Math.floor(windowWidth / boxWidth);
wrap.width(colsNumber * boxWidth);
//定义一个数组并存储每一列的高度
var everyHeight = new Array();
for(i = 0; i < boxes.length; i++){
if(i < colsNumber){
everyHeight[i] = boxes.eq(i).height() + 40;//加上margin
console.log(i);
}else{
//开始控制定位
var minHeight = Math.min.apply(null,everyHeight);
console.log(i);
console.log("minHeight:" + minHeight);
var minIndex = getIndex(minHeight,everyHeight);
console.log("minIndex: "+ minIndex);
var leftValue = boxes.eq(minIndex).position().left;
console.log("leftValue" + leftValue);
boxes.eq(i).css({
'position':'absolute',
'top':minHeight,
'left':leftValue,
'opacity':'0'
}).stop().animate({
'opacity':1
},1000);
everyHeight[minIndex] += boxes.eq(i).height() + 40;
console.log("height update:" + everyHeight[minIndex]);
}
}
}
//获取最小列的索引
function getIndex(minHeight, everyHeight){
for(index in everyHeight){
if(everyHeight[index] == minHeight){
return index;
}
}
}
$(document).ready(function (event) {
var wrap = $('#wrap');
var boxes = $('#wrap').children('div');
waterfall(wrap,boxes);
//滚动效果的触发
$(this).scroll(function (event) {
appendBox(wrap);
});
});
//追加盒子函数
var appendBox = function (wrap) {
for(i in data){
var innerString = '<div> <img src="code/images/' + data[i].src + '"><a href="http://www.google.com" target="_blank">' + data[i].title + '</a></div>'
wrap.append(innerString);
}
waterfall(warp,warp.children('div'));
};正在回答 回答被采纳积分+1
window.onload = function() {
//获得外层以及每一个盒子
var container = document.getElementById('wrap');
var boxes = container.getElementsByTagName('div');
//运行瀑布流主函数
waterfall(container, boxes);
//模拟数据
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": "第十八怪 背着娃娃谈恋爱"
}];
//设置滚动加载
window.onscroll = function() {
//校验数据请求
if (getCheck()) {
var wrap = container;
for (i in data) {
//创建figure
var figure = document.createElement('div');
wrap.appendChild(figure);
//创建img
var img = document.createElement('img');
img.src = 'img/' + data[i].src;
img.style.height = 'auto';
figure.appendChild(img);
//创建a标记
var a = document.createElement('a');
a.href = "http://www.imooc.com";
a.target = "_blank";
a.innerHTML = data[i].title;
figure.appendChild(a);
};
waterfall(container, boxes);
};
};
};
// 瀑布流主函数
function waterfall(wrap, figures) {
// 获得屏幕可显示的列数
var figureW = figures[0].offsetWidth + 20;
var colsNum = Math.floor(document.documentElement.clientWidth / figureW);
wrap.style.width = figureW * colsNum + 'px'; //为外层赋值宽度
// 循环出所有的figure并按照瀑布流排列
var everyH = []; //定义一个数组存储每一列的高度
for (var i = 0; i < figures.length; i++) {
if (i < colsNum) {
everyH[i] = figures[i].offsetHeight + 20;
} else {
var minH = Math.min.apply(null, everyH); //获得最小的列的高度
var minIndex = getIndex(minH, everyH); //获得最小列的索引
getStyle(figures[i], minH, figures[minIndex].offsetLeft - 10, i);
everyH[minIndex] += figures[i].offsetHeight + 20; //更新最小列的高度
};
figures[i].onmouseover = function() {
this.style.opacity = "0.5";
};
figures[i].onmouseout = function() {
this.style.opacity = "1";
};
};
};
// 获取最小列的索引
function getIndex(minH, everyH) {
for (index in everyH) {
if (everyH[index] == minH){
return index;
};
};
};
// 数据请求检验
function getCheck() {
var documentH = document.documentElement.clientHeight;
var scrollH = document.documentElement.scrollTop || document.body.scrollTop;
return documentH + scrollH >= getLastH() ? true : false;
};
// 获得最后一个figure所在列的高度
function getLastH() {
var wrap = document.getElementById('wrap');
var figures = document.getElementsByTagName('div');
return figures[figures.length - 1].offsetTop + figures[figures.length - 1].offsetHeight;
};
// 设置加载样式
var getStartNum = 0; //设置请求加载的条数的位置
function getStyle(figure, top, left, index) {
if (getStartNum >= index) return;
$(figure).css({
'position': 'absolute',
'top': top,
"left": left,
"opacity": "0"
});
$(figure).stop().animate({
"opacity": "1"
}, 999);
getStartNum = index; //更新请求数据的条数位置
};你的代码是不够完善的,将你的代码进行了调整,建议参考对比一下,另外建议将你的代码放在window.onload = function() {}中,且你的代码没有获取var container = document.getElementById('wrap');和var boxes = container.getElementsByTagName('div');的操作哦~祝学习愉快!
css文件 style.css
/* all tags*/
*{
padding:0;
margin:0;
border:none;
}
body{
background:#ddd;
}
img{
border:none;
}
a{
text-decoration: none;
color:#444;
}
a:hover{
color:#999;
}
/*wrap*/
#wrap{
position:relative;
width:auto;
height: auto;
margin:0 auto;
}
#wrap>div{
float:left;
box-sizing: border-box;
width: 280px;
height: auto;
margin:10px;
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;
}<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>云南十八怪</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="wrap">
<div>
<img src="code/images/1.png">
<a href="http://www.google.com" target="_blank">第一怪 竹筒当烟袋</a>
</div>
<div>
<img src="code/images/2.png">
<a href="http://www.google.com" target="_blank">第二怪 草帽当锅盖</a>
</div>
<div>
<img src="code/images/3.png">
<a href="http://www.google.com" target="_blank">第三怪 这边下雨那边晒</a>
</div>
<div>
<img src="code/images/4.png">
<a href="http://www.google.com" target="_blank">第四怪 四季服装同穿戴</a>
</div>
<div>
<img src="code/images/5.png">
<a href="http://www.google.com" target="_blank">第五怪 火车没有汽车快</a>
</div>
<div>
<img src="code/images/6.png">
<a href="http://www.google.com" target="_blank">第六怪 火车不通国内通国外</a>
</div>
<div>
<img src="code/images/7.png">
<a href="http://www.google.com" target="_blank">第七怪 老奶爬山比猴快</a>
</div>
<div>
<img src="code/images/8.png">
<a href="http://www.google.com" target="_blank">第八怪 鞋子后面多一块</a>
</div>
<div>
<img src="code/images/9.png">
<a href="http://www.google.com" target="_blank">第九怪 脚趾四季露在外</a>
</div>
<div>
<img src="code/images/10.png">
<a href="http://www.google.com" target="_blank">第十怪 鸡蛋拴着卖</a>
</div>
<div>
<img src="code/images/11.png">
<a href="http://www.google.com" target="_blank">第十一怪 粑粑叫饵块</a>
</div>
<div>
<img src="code/images/12.png">
<a href="http://www.google.com" target="_blank">第十二怪 花生蚕豆数着卖</a>
</div>
<div>
<img src="code/images/13.png">
<a href="http://www.google.com" target="_blank">第十三怪 三个蚊子一盘菜</a>
</div>
<div>
<img src="code/images/14.png">
<a href="http://www.google.com" target="_blank">第十四怪 四个老鼠一麻袋</a>
</div>
<div>
<img src="code/images/15.png">
<a href="http://www.google.com" target="_blank">第十五怪 树上松毛扭着卖</a>
</div>
<div>
<img src="code/images/16.png">
<a href="http://www.google.com" target="_blank">第十六怪 姑娘叫老太</a>
</div>
<div>
<img src="code/images/17.png">
<a href="http://www.google.com" target="_blank">第十七怪 小和尚可以谈恋爱</a>
</div>
<div>
<img src="code/images/18.png">
<a href="http://www.google.com" target="_blank">第十八怪 背着娃娃谈恋爱</a>
</div>
</div>
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>
<!--<script type="text/javascript" src="script.js"></script>-->
<script type="text/javascript" src="jquery_script.js"></script>
</body>
</html>
- 参与学习 人
- 提交作业 11218 份
- 解答问题 36712 个
从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星