为了账号安全,请及时绑定邮箱和手机立即绑定

数据变为只循环一次之后,最下方有两张图重叠了,这是什么原因?


http://img1.sycdn.imooc.com//573aee6f0001a52915620771.jpg

$(window).on('load', function() {
	waterfall();
	var dataInt = {
		'data': [{
			'src': '22.jpg'
		}, {
			'src': '23.jpg'
		}, {
			'src': '24.jpg'
		}, {
			'src': '13.jpg'
		}, {
			'src': '14.jpg'
		}, {
			'src': '11.jpg'
		}, {
			'src': '4.jpg'
		}]
	};
	
    var flag=true;
	window.onscroll = function() {		
		if (have()&&flag) {
			$.each(dataInt.data, function(idx, obj) {
				var h = $('<div></div>');
				h.attr('class', 'box');
				var p = $('<div></div>');
				p.attr('class', 'pic');
				p.appendTo(h);
				$('<img>').attr('src', 'img/' + $(obj).attr('src')).appendTo(p);
				h.appendTo('#main');
			})
			waterfall();
		}
		flag=false;
	}
	
	
})

function waterfall() {
	var box = $("#main>div");
	var width = box.eq(0).outerWidth();
	var cols = Math.floor($(window).width() / width);
	$("#main").width(width * cols).css('margin', '0 auto');
	var hay = [];
	$(".box").each(function(index, element) {
		var height = box.eq(index).outerHeight();
		if (index < cols) {
			//hay[index]=height;
			hay.push(height);
		} else {
			var minHeight = Math.min.apply(this, hay);
			var minHIndex = $.inArray(minHeight, hay);
			//$.inArray()获取需要那个数组中的哪个值
			$(element).css({
				'position': 'absolute',
				'top': minHeight + 'px',
				'left': minHIndex * width + 'px'
			})
			hay[minHIndex] += box.eq(index).outerHeight();
		}
	})
}

function have() {
	var last = $("#main>div").last();
	var lasthalf = last.offset().top + Math.floor(last.outerHeight() / 2);
	var scrolltop = $(window).scrollTop();
	var documentheight = $(window).height();
	return (lasthalf < scrolltop + documentheight) ? true : false;
}


正在回答

1 回答

waterfall();需要写在each()函数内。你写在外面了。对后面加的元素没用,自然就重叠了

0 回复 有任何疑惑可以回复我~
#1

yang_216 提问者

亲测,并没有因为写在each里而变好,跟这个没啥关系吧。
2016-06-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

数据变为只循环一次之后,最下方有两张图重叠了,这是什么原因?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信