83510998 2020-02-25
/*扩展jquery 的方法,扩展的方法是要操作局部的dom*/ $.fn.waterFall=function(){ var $items=$(this); var parentWidth=$items.width();//盒子宽度 var $childRen=$items.children(".item"); var width=$childRen.width();//每一个item宽度 var column=5;//列数 var space=(parentWidth-column*width)/(column-1);//间距 //定义的一个临时的存储区,记录每一列的高度. var arr=[]; $childRen.each(function(index,dom){ var $dom=$(dom); if(index<column){ //这里是计算前面的5列位置. $dom.css({ top:0, left:index*(width+space) }); arr.push($dom.height()); }else{ //这里是计算后面的元素的位置. var minIndex=0; //找到最矮的这一列的高度,以及索引值. var minHeight=arr[minIndex]; for(var i=0;i<arr.length;i++){ if(minHeight>arr[i]){ minHeight=arr[i]; minIndex=i; } } //找到之后改这个item 的位置. //找到最矮的一列,然后把这个元素加到最矮的那一列下面去. $dom.css({ left:minIndex*(width+space), top:minHeight+space }); // 这里是把最矮的那一列的高度进行更新,因为你在最矮的这一列添加了元素. arr[minIndex]=minHeight+space+$dom.height(); } }) }
<div class="items"> <div class="item"> <img src="../imgs/1.png"/> </div> <div class="item"> <img src="../imgs/1.png"/> </div> </div> //引入jQuery和上面waterFall.js <script> $(".items").waterFall() </script>