博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
瀑布流照片墙布局
阅读量:6904 次
发布时间:2019-06-27

本文共 2929 字,大约阅读时间需要 9 分钟。


title: 瀑布流照片墙布局

瀑布流概念

  • 瀑布流布局是错落式的布局方式。它有一个特点,整个布局以列为单位,下一个区块总是放在总高度最短的那一列的下面。

实现

  • html代码块
复制代码
  • css代码块
*{margin:0;padding:0};	#pics{list-style: none;margin: 30px auto;width: 1080px;}	#pics li{float: left;width: 250px;margin: 10px;}	#pics li div{width: 210px;padding: 10px;border: 1px solid gray;margin-bottom: 20px;}	#pics li div img{width: 200px;}复制代码
  • js代码块
//运用ajax获取图片地址	//获取页面元素(组件/控件)	let lis=document.getElementById("pics").getElementsByTagName("li");	//接收服务器数据	function fn(data){		//遍历所有数据		for(let i in data){			let oDiv=document.createElement("div");			let oImg=document.createElement("img");			let oP=document.createElement("p");			//将接收的数据放到页面组件中			oImg.src=data[i].preview; //缩略图			oP.innerHTML=data[i].title;  //标题			//将oImg和oP放到oDiv中			oDiv.appendChild(oImg);			oDiv.appendChild(oP);			//按一定的规律将图片放入到li中			switch(i%4){				case 0:					lis[0].appendChild(oDiv);				break;				case 1:					lis[1].appendChild(oDiv);				break;				case 2:					lis[2].appendChild(oDiv);				break;				case 3:					lis[3].appendChild(oDiv);				break;				default:					lis[0].appendChild(oDiv);				break;			}		}			}	//pageIndex表示页码	let pageIndex=1;	let JSONP=document.creatElement("script");	JSONP.type='text/javaScript';	//src表示地址 fn表示回调函数	JSONP.src="http://www.wookmark.com/api/json/popular?page='+pageIndex+'&callback=fn";	document.body.appendChild(JSONP);复制代码
  • 这种方式实现的效果是每个列的元素内的图片数量是一致的,如果某一列高度图片过高,那么就会出现最后的效果是参差不齐的。如果在加载下一页,效果就会更加不好,会存在一个又一个的窟窿,这显然是和我们想要的效果是不一致的。那样这就需要我们队代码进行一定的更改。 代码如下:
//获取页面元素(组件/控件)	let lis=document.getElementById("pics").getElementsByTagName("li");	//pageIndex表示页码	let pageIndex=1;	let isLoaded=false;	loadData();//加载数据	//滚动事件	window.onscroll=function(){		var index=getMinHeight();//最短列的索引		// console.log(document.documentElement.scrollTop);//滚动距离		//滚动高度		var h1=document.documentElement.scrollTop;		var h2=document.documentElement.clientHeight;//视口高度		var h3=lis[index].offsetHeight;//最短列高度		if(h1+h2>h3){			//加载下一页			pageIndex++;			if(isLoaded){				loadData();				}		}	};		//接收服务器数据	function fn(data){		//遍历所有数据		for(let i in data){			let oDiv=document.createElement("div");			let oImg=document.createElement("img");			let oP=document.createElement("p");			//将接收的数据放到页面组件中			oImg.src=data[i].preview; //缩略图preview表示图片路径			oP.innerHTML=data[i].title;  //标题title表图片标题			//将oImg和oP放到oDiv中			oDiv.appendChild(oImg);			oDiv.appendChild(oP);			//设置div预留高度			var oH=(data[i].height/data[i].width)*220+80+'px';			oDiv.style.height=oH;			oDiv.appendChild(oImg);			oDiv.appendChild(oP);			//计算 上一次存放后,所有列中最短列			//将图片放置在最短的列中			var index=getMinHeight();			lis[index].appendChild(oDiv);		}		isLoaded=true;//加载完毕			};	//获取最短列	function getMinHeight(){		let minIndex=0;		//假设第一列最短 最短列索引		//取出最短列的高度		let mHieght=lis[minIndex].offsetHeight;		for(let i=0;i
  • 最后还需要提醒大家一点,本篇文章中的例子仅供参考学习,是用于帮助大家理解瀑布流布局的,切误将本篇文章中的代码直接使用在正式项目当中。希望以上代码对大家有所帮助。

转载于:https://juejin.im/post/5ad49d5b5188257ddb1018ce

你可能感兴趣的文章
linux 网络编程 51cto,Linux服务器开发,2小时搞定高并发网络编程
查看>>
fork是linux函数吗,关于LINUX中的FORK函数
查看>>
红旗linux 进不去图形界面,进不了红旗Linux6.0的图形界面请高手帮忙
查看>>
linux安装中文语言命令,Centos使用yum命令安装中文语言包(fonts-chinese.noarch,m17n-db-common-cjk)...
查看>>
linux添加Qt的fontconfig,QT__qt SDK------Fontconfig-2.4.2安装 (二)
查看>>
linux 查看io调度策略,磁盘IO调度策略
查看>>
高通笔记本装linux,在华硕畅370(TP370QL)骁龙笔记本上安装Ubuntu 18.04 ARM64的方法...
查看>>
linux sysfs属性,linux-sysfs
查看>>
c语言int speed=1,求大神帮忙看看这个弹弹球消砖块的游戏代码,为什么speed只能15...
查看>>
c语言如何控制误差小于10-n,C语言使用注意事项(二)
查看>>
c语言黑白棋图形,C语言黑白棋游戏[转载]
查看>>
Grunt 入门指南2:任务配置
查看>>
nullnullsql 多条件查询
查看>>
js 字符串转换数字
查看>>
ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
查看>>
函数调用Java Web使用swfobject调用flex图表
查看>>
加中实训第二天(笔记+代码) - 2013.5.29 (待完善)
查看>>
《JavaScript DOM 编程艺术》小结
查看>>
MYSQ提高L查询效率的策略总结
查看>>
java--九九乘法表
查看>>