Jquery瀑布流

▼魔方 西西 提交于 2019-11-30 22:38:38

+
最近今天一直在看瀑布流的帖子,发现很多帖子实现的方法都不一样,这让我这个菜鸟很懵逼,
我在众多帖子中找出一份比较好的,相对比较容易理解的

demo

首先,写HTML的框架

html

12345678910111213141516171819
<body>	<ul id="box">		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>		<li><img src="img/16.png"></li>	</ul></body>

css布局

1234567891011121314151617
ul{	list-style: none;	margin:0;	padding:0;}	position:relative;}#box li{	position: absolute;	border:1px solid #ccc;	left:0;	top:0;}li { 	transition: all .7s ease-out .1s }

js部分

12345678910111213141516171819202122232425262728293031323334353637383940
<script>	var margin = 20;			//这里设置间距	var li=$("li");				//这里是区块名称	var li_W = li[0].offsetWidth+margin;	//取区块的实际宽度,包含间距	function (){  	    var h=[];       //记录区块高度的数组	    var n = document.documentElement.offsetWidth/li_W|0;  //窗口的宽度除以区块宽度就是一行能放几个区块	    for(var i = 0;i < li.length;i++) {	        li_H = li[i].offsetHeight;	        if(i < n) {   //n是一行最多的li,所以小于n就是第一行了	            h[i]=li_H;   //把每个li放到数组里面	            li.eq(i).css("top",0);   //第一行的Li的top值为0	            li.eq(i).css("left",i * li_W);   //第i个li的左坐标就是i*li的宽度	        }	        else{	            min_H =Math.min.apply(null,h) ;    //取得数组中的最小值,区块中高度值最小的那个	            minKey = getarraykey(h,min_H);   //最小的值对应的指针	            h[minKey] += li_H+margin ;     //加上新高度后更新高度值	            li.eq(i).css("top",min_H+margin);   //先得到高度最小的Li,然后把接下来的li放到它的下面	            li.eq(i).css("left",minKey * li_W);  //第i个li的左坐标就是i*li的宽度	        }	    }	}	/* 使用for in运算返回数组中某一值的对应项数(比如算出最小的高度值是数组里面的第几个) */	function getarraykey(s, v) {		for(k in s) {			if(s[k] == v) {				return k;			}		}	}	/*这里一定要用onload,因为图片不加载完就不知道高度值*/	window.onload = function() {		pull();	}	/*浏览器窗口改变时也运行函数*/	window.onresize = function() {		pull();	}</script>

原文:大专栏  Jquery瀑布流


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!