实现瀑布流效果时,$lastBox一直报这个错,Cannot read property 'top' of undefined , 没找到原因

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

紫陌东城

2018-03-06 15:24

$(window).on("load",function(){
	waterfall();
	var dataInt = {"data":[{"src":"P_00.jpg"},{"src":"P_01.jpg"},{"src":"P_02.jpg"}]};
	$(window).on('scroll',function(){
		if(checkScrollSlide()){
			$each(dataInt.data,function(key,value){
				//console.log(value);
				var oBox = $('<div>').addClass('box').appendTo($("#main"));
				var oPic = $('<div>').addClass('pic').appendTo($(oBox));
				$('<img>').attr('src','images/'+$(value).attr('src')).appendTo(oPic);
				
				//console.log($(value).attr('src'));
			})
			waterfall();
		}
	})
})
function waterfall(){
	var $boxs = $('#main > div');
	var w = $boxs.eq(0).outerWidth();//outerWidth 可以获取加padding margin的宽
	var cols = Math.floor($(window).width()/w);
	$("#main").width(w*cols).css("margin","0 auto");//不需要设置单位
	var hArr = [];
	$boxs.each(function(index,value){
		var h = $boxs.eq(index).outerHeight();
		if(index<cols){
			hArr[index] = h;
		}else{
			var minH = Math.min.apply(null,hArr);
			var minHIndex = $.inArray(minH,hArr);
			$(value).css({
				'position' : 'absolute',
				'top' : minH+'px',
				'left' : minHIndex*w + 'px'
			})
			hArr[minHIndex]+= $boxs.eq(index).outerHeight();
		}
	})
	//console.log(index);
}

function checkScrollSlide(){
	var $lastBox = $('#min>div').last();
	console.log($lastBox);
	var lastBoxDis = $lastBox.offset().top + Math.floor($lastBox.outerHeight()/2);
	var scrollTop = $(window).scrollTop();
	var documentH = $(window).height();
	return (lastBoxDis < scrollTop + documentH)?true : false;
}


写回答 关注

1回答

  • 那个谁556
    2018-03-09 13:32:09
    已采纳

    var $lastBox = $('#min>div').last();

    不是min是main

    紫陌东城

    多谢,万万没想到.....

    2018-03-09 14:47:50

    共 1 条回复 >

瀑布流布局

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

97748 学习 · 758 问题

查看课程

相似问题