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

后加载图片的第一列出现图片重叠了,是哪里出问题了呢?

代码和老师的差不多。

第一列的图片多加载了,重叠在一起了。其他列正常,大神帮忙看下哪里出问题了

http://img1.sycdn.imooc.com//574ebacd00011b5004270652.jpg

$(window).on('load',function(){
	waterfall("main","pic");
	var dataInt={'data':[{'src':'tang-31.jpg'},{'src':'tang-32.jpg'},{'src':'tang-33.jpg'},{'src':'tang-34.jpg'},{'src':'tang-35.jpg'}]};
	window.onscroll=function(){
		if (checkscrollside()) {
			$.each(dataInt.data,function(index,value){
				var $oPic=$('<div>').addClass('pic').appendTo($("#main"));
				var $oBox=$('<div>').addClass('box').appendTo($oPic);
				$('<img>').attr('src','images/'+$(value).attr('src')).appendTo($oBox);
			});
			waterfall();
			};
		}
});

//实现瀑布排列
function waterfall(parent,pic){
	var $aPic=$("#main>div");
	var iPicW=$aPic.eq(0).width();//一个列pic的宽度
	var num=Math.floor($(window).width()/iPicW);//每行能容纳的块的个数
	$("#main").css({
		'width':iPicW*num,
		'margin':'0 auto'
	});
	

	var picHArr=[ ];//用于存储 每列中所有块框的高度。

	$aPic.each(function(index,value){
		var picH=$aPic.eq(index).height();
		if(index<num){
			picHArr[index]=picH;
		}else{
			var minH=Math.min.apply(null,picHArr);//数组中的最小值。
			var minHIndex=$.inArray(minH,picHArr);
			$(value).css({
				'position':'absolute',
				'top':minH+15,
				'left':$aPic.eq(minHIndex).position().left
			});
			picHArr[minHIndex]+=$aPic.eq(index).outerHeight()+15;//更新添加了块框后的列高。
		}

	});
}

function checkscrollside(){
	var $aPic=$("#main>div");
	var lastPicH=$aPic.last().get(0).offsetTop+Math.floor($aPic.last().height()/2);
	//创建触发添加块框函数waterfall()】的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载)
	var scrollTop=$(window).scrollTop();

	var documentH=$(document).width();//页面高度
	return(lastPicH<scrollTop+documentH)?true:false;
}


正在回答

3 回答

换个浏览器试试  

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

var iPicW=$aPic.eq(0).width();//width()这样设置是不包括图片的padding值的,也就是会比原值更小

var num=Math.floor($(window).width()/iPicW);//既然iPicW减小了,每行能容纳的块的个数自然会增大(当然本例因为取值原因并没有增大)

'width':iPicW*num,//iPicW减小导致设置的整个div的宽度也变小了,结果减小后的div却要容纳同样的列数num,自然会有一列重叠了

所以将var iPicW=$aPic.eq(0).width();改为var iPicW=$aPic.eq(0).outerWidth();即可

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

hello清风 提问者

谢谢大神,终于解决啦。棒棒哒
2016-06-30 回复 有任何疑惑可以回复我~
    
    waterfall()里面给Main设置宽度是这样的
    $("#main").css({
        'width':'iPicW*num',
        'margin':'0 auto'
    });
    
    你没给width后面的那个加单引号,加上单引号就好了


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

hello清风 提问者

加了,还是不行啊
2016-06-10 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

后加载图片的第一列出现图片重叠了,是哪里出问题了呢?

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