#学习笔记#(28)JS瀑布流-慕课

waterfall.html

<html>
	<head>
		<title>瀑布流布局</title>
		<meta charset="gb2312"/>
		<link type="text/css" rel="stylesheet" href="style2.css"/>
		<script src="javascript2.js"></script>
	</head>
	<body>
		<div id="main"><!--放置所有图片的容器,设置id方便js获取元素-->
			<div class="box"><!--每张图片用一个box装载-->
				<div class="pic"><!--在这里放置图片,并设置图片的样式-->
					<img src="images/0.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/0.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/1.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/2.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/3.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/4.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/5.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/6.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/7.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/8.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/9.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/10.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/11.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/12.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/13.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/14.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/15.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/16.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/17.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/18.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/19.jpg"></img>
				</div>
			</div>
			<div class="box">
				<div class="pic">
					<img src="images/20.jpg"></img>
				</div>
			</div>
		</div>
	</body>
</html>
style.css

*{
	margin:0px;
	padding:0px;
}
#mian{
	position:relative;
}
.box{
	float:left;
	padding:15px 0px 0px 15px;
}
.pic{
	padding:10px;
	border:1px solid #ccc;
	border-radius:5px;
	box-shadow:0 0 5px #ccc;
}
.pic img{
	width:165px;
	height:auto;
}
javascript.js

window.οnlοad=function(){
	waterfall("main","box");
}
function waterfall(parent,box){
	//将main下所有class为box的元素取出
	var oParent=document.getElementById(parent);
	var oBoxs=getByClass(oParent,box);
	//计算整个页面显示的列数(页面宽度/box宽度)
	var oBoxW=oBoxs[0].offsetWidth;// 202 =图片宽度165+内边距10*2+边框宽度1*2+15
	var cols=Math.floor(document.documentElement.clientWidth/oBoxW);//获取列数
	//设置main的宽度
	oParent.style.cssText='width:'+oBoxW*cols+'px;margin:0px auto;';
	var hArr=[];//用来放置每列的box的高度
	for(var i=0;i<oBoxs.length;i++){
		if(i<cols){
			hArr.push(oBoxs[i].offsetHeight);
		}else{
			var minH=Math.min.apply(null,hArr);//Math.min()只能获取一组数值中的最小值,不能直接对数组进行处理
			var index=getMinhIndex(hArr,minH);
			oBoxs[i].style.position="absolute";
			oBoxs[i].style.top=minH+"px";
			oBoxs[i].style.left=oBoxs[index].offsetLeft+"px";
			hArr[index]+=oBoxs[i].offsetHeight;
		}
	}
}
//根据class获取元素
function getByClass(parent,clsName){
	var boxArr=new Array(),//用来存储获取到的所有class为box的元素
		oElements=parent.getElementsByTagName("*");
		for(var i=0;i<oElements.length;i++){
			if(oElements[i].className==clsName){
				boxArr.push(oElements[i]);
			}
		}
		return boxArr;
}
function getMinhIndex(arr,val){
	for (var i in arr) {
		if(arr[i]==val){
			return i;
		}
	};
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值