JS 实现简单的瀑布流

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
		<style type="text/css">
			.out {margin: 0 auto;position: relative;}
			.in {float: left;}
			.in img{margin: 10px;padding: 10px;width: 214px;;border: #ccc solid 1px;border-radius: 5px;box-shadow: 0 0 2px #ccc;}
		</style>
    </head>
    <body>
		<div class="out"></div>
    </body>
	<script>
		/*给页面添加div*/
		function addDiv(){
			/*
				1.发起请求;
				2.等待请求完成;
				3.把数据加进来;
			*/
			for(var i=0;i<jsonData.src.length;i++){
				var div = document.createElement('div');
				div.className = 'in';
				div.innerHTML = '<img src="img/pbl/'+jsonData.src[i]+'"/>';
				outDiv.appendChild(div);
			}
		}
		/*给页面添加瀑布流*/
		function addwaterfull(){
			/*获取所有的in*/
			var inDivs = document.querySelectorAll('.in');
			var inW = inDivs[0].offsetWidth;
			var num= Math.floor(document.documentElement.clientWidth/inW);
			outDiv.style.width = num*inW + 'px';
			var heightArr = [];
			
			for(var i=0;i<inDivs.length;i++){
				if(i<num){
					/*第一行的元素*/
					//heightArr[i] = inDivs[i].offsetHeight;
					heightArr.push(inDivs[i].offsetHeight);
					
				}else{
					/*第二行以后的元素*/
					inDivs[i].style.position = 'absolute';
					var minHeight = Math.min.apply(null,heightArr);
					var minIndex = heightArr.indexOf(minHeight);
					
					inDivs[i].style.left =inDivs[minIndex].offsetLeft  +'px';
					//inDivs[i].style.left =inW*minIndex +'px';
					inDivs[i].style.top = minHeight + 'px';
					heightArr[minIndex] = heightArr[minIndex] + inDivs[i].offsetHeight;		
				}
			}
		}
		/*判断是否需要添加新数据*/
		function ifAddData(){
			var scrollY = document.body.scrollTop;
			var clientH = document.documentElement.clientHeight;
			var inDivs = document.querySelectorAll('.in');
			var lastDivTop = inDivs[inDivs.length-1].offsetTop;
			if (scrollY+clientH>lastDivTop){
				return true;
			}
		}
	
		var jsonStr = '{"src":["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg","6.jpg","7.jpg","8.jpg","9.jpg","10.jpg","11.jpg","12.jpg","13.jpg","14.jpg","15.jpg"]}'
		var jsonData = JSON.parse(jsonStr);
		
		var outDiv = document.querySelector('.out');
		
		addDiv();
		
		window.onload = function(){
			addwaterfull();
		}
		
		window.onscroll = function(){
			//console.log(document.documentElement.clientHeight)
			if(ifAddData()){
				addDiv();
				addwaterfull();
				
			}
		}
	</script>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值