照片瀑布流

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>图墙</title>
	<style>
		*{//消除内外边距
			padding: 0;
			margin: 0;
		}
		#itemBox{
		//给大div 指定宽高 相对定位 剧中
			width: 1050px;
			height: 100px;
			margin: 0px auto;
			position: relative;
		}
		.item{
		//给照片设置边框 内边距  绝对定位
			border: 1px solid #ccc;
			padding: 4px;
			position: absolute;
		}
	</style>
</head>
<body>
	<div id="itemBox">
<div class="item">
	<img src="images/P_006.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_000.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_001.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_002.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_003.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_004.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_005.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_006.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_000.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_001.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_002.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_003.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_004.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_005.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_006.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_000.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_001.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_002.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_003.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_004.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_005.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_006.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_000.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_001.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_002.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_003.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_004.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_005.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_006.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_000.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_001.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_002.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_003.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_004.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_005.jpg" alt="#">
</div>
<div class="item">
	<img src="images/P_006.jpg" alt="#">
</div>
	</div>

	<script type="text/javascript">
	//页面加载完成时执行代码
		window.onload=function(){
		//获取元素
			var itemBox=document.getElementById('itemBox');
			var items=document.getElementsByClassName('item');
			//获取元素的宽度 
			
			var itemBoxW=itemBox.offsetWidth;
			//获取大div的宽度
			var itemW=items[0].offsetWidth;
			//获取照片的宽度
			var c=parseInt(itemBoxW / itemW);
			//计算要排多少列
			var d=(itemBoxW - c*itemW)/c;
			//计算每张照片之间的空袭
			var arr=[]; //定义一个空数组
			waterFull();//瀑布效果
			function waterFull(){
				for (var i = 0; i < items.length; i++) {
					if (i<c) //第一排的照片 排放位置
					{	
						items[i].style.left=(itemW + d) * i + "px";
						items[i].style.top=d + "px";
						arr[i]=items[i].offsetHeight + d;
					}else//第二排及以后添加照片的位置
					{   //定义一个变量  获取数组中照片高度最低的那一个
						var minH=getMin(arr).minH;
						//获取第一排照片的最低高度(height)的照片
						var minI=getMin(arr).minI;
						//获取最低(height)照片所在的列
						items[i].style.left=(itemW + d) * minI + "px";                  
						//把新照片添加所在的列 
						items[i].style.top=minH + d + "px";
						//把照片放在在高度最低的照片下面
						
						arr[minI]=arr[minI]+items[i].offsetHeight+d;
						//刷新照片最低的高度 重新找其他列剩余的最低高度 添加照片
					}
					
				}
			}
			function getMin(arr){
//获取数组的最小值以及索引  返回多个值  封装对象
				var obj={};
				//对象名.属性名 = 属性值
				obj.minH=arr[0];
				obj.minI=0;
				for (var i = 1; i < arr.length; i++) {
					if (arr[i] < obj.minH)
					//如果有元素比该元素小 就把更小的值赋值给他 并获取索引
 {
						obj.minH=arr[i];
						obj.minI=i;
					}
				}
				return obj;
				返回数组
			}
			// 6.滚动页面时,加载数据
			window.onscroll = function() {
			
				if (window.pageYOffset + window.innerHeight > getMin(arr).minH)
					// 当文档左上角滚动的距离 加上 当前窗口高度  > 高度
				 {
					
					var json = [
						{ "src": "images/P_000.jpg" },
	                    { "src": "images/P_001.jpg" },
	                    { "src": "images/P_002.jpg" },
	                    { "src": "images/P_003.jpg" },
	                    { "src": "images/P_004.jpg" },
	                    { "src": "images/P_005.jpg" },
	                    { "src": "images/P_006.jpg" },
	                    { "src": "images/P_007.jpg" },
	                    { "src": "images/P_008.jpg" },
	                    { "src": "images/P_009.jpg" },
	                    { "src": "images/P_010.jpg" }
					];
					for (var i = 0; i < json.length; i++) 
					//遍历新的图片数组
					{
						var div =document.createElement('div');
						div.className = 'item';
						//创建div
						var img =document.createElement('img');
						//添加图片
						img.src = json[i].src;
						//获取图片地址
						div.appendChild(img);
						//往新的div中添加图片
						itemBox.appendChild(div);
						//加ru到页面父元素布局
					}
					waterFull();
					//执行瀑布流
				}
			}
		}
	</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值