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

来源:3-2 jQuery实现瀑布流布局的图片加载功能

yang_216

2016-05-17 18:13


http://img.mukewang.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回答

  • 言翼
    2016-06-03 11:56:39

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

    yang_2...

    亲测,并没有因为写在each里而变好,跟这个没啥关系吧。

    2016-06-08 16:27:43

    共 1 条回复 >

瀑布流布局

瀑布流布局是网站比较流行的一种布局方式,教你实现三大方式

97759 学习 · 736 问题

查看课程

相似问题