瀑布流JQ
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>瀑布流没有完成jq</title> </head> <style type="text/css"> *{margin:0; padding:0; margin:0 auto;} #main{ position:relative;} .box{ padding:15px 0 0 10px; float:left; display:inline; } .pic { padding:10px; border:1px solid #ccc; border-radius:5px; box-shadow:0 0 2px #ccc; } .pic img{ width:165px; height:auto;} </style> <body> <div id='jz'>加载</div> <div id="main"> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://www.baidu.com/img/baidu_jgylogo3.gif" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss0.baidu.com/73x1bjeh1BF3odCf/it/u=2413634062,3211494602&fm=96&s=E53876DA8E21791562B84C5A030040D7" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img02.taobaocdn.com/bao/uploaded/i2/TB1VhbGGXXXXXaxXpXXXXXXXXXX_!!0-item_pic.jpg_80x80.jpg" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://static.17shihui.cn/17shihui/w1.1.50/image/weixin.png?static_version=2" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://ubmcmm.baidustatic.com/media/v1/0f000DH992eKAi22Lq-JVs.jpg" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss0.baidu.com/73F1bjeh1BF3odCf/it/u=4282994204,2464365452&fm=96&s=29828C57C21E21CE1D3408290300E053" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://gd3.alicdn.com/bao/uploaded/i3/TB1QENsGpXXXXXDXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img3.shijue.cvidea.cn/tf/130530/2283083/52ae71293dfae9b500000005.JPEG" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://www.baidu.com/img/baidu_jgylogo3.gif" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss0.baidu.com/73x1bjeh1BF3odCf/it/u=2413634062,3211494602&fm=96&s=E53876DA8E21791562B84C5A030040D7" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img02.taobaocdn.com/bao/uploaded/i2/TB1VhbGGXXXXXaxXpXXXXXXXXXX_!!0-item_pic.jpg_80x80.jpg" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://static.17shihui.cn/17shihui/w1.1.50/image/weixin.png?static_version=2" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2276790136,2981566643&fm=58" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://ubmcmm.baidustatic.com/media/v1/0f000DH992eKAi22Lq-JVs.jpg" /> </div> </div> <div class="box"> <div class="pic"> <img src="https://ss0.baidu.com/73F1bjeh1BF3odCf/it/u=4282994204,2464365452&fm=96&s=29828C57C21E21CE1D3408290300E053" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://gd3.alicdn.com/bao/uploaded/i3/TB1QENsGpXXXXXDXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img.hb.aicdn.com/fb083f6baea7c9ed0d2cce4bd3846b7f8fc2bdc71886e-Fon7KQ_sq320" /> </div> </div> <div class="box"> <div class="pic"> <img src="http://img3.shijue.cvidea.cn/tf/130530/2283083/52ae71293dfae9b500000005.JPEG" /> </div> </div> </div> </body> </html> <script src="js/jquery-1.11.1.min.js"></script> <script language="JavaScript" type="text/javascript"> /* 1、页面加载时 执行 waterfall 方法; 2、写waterfall 方法,里面有两个参数 父Id 子CLSS名。 3、waterfall 里面的步骤: 获取里面的要传的ID ,获取这个ID下面的 所以要CLASS元素,此时要写 getByClass 方法 计算可以区, 显示多少列,: A ;一个CLASS 的宽度, B 可以区别的宽度, 父ID的总宽度: A*B 4' 下面是计算第一列中高度最小的那个元素,然后把要添加的那个元素添加到最小元素下面。 用FOR , index 获取当前元素的index值方法 此时,页面显示排版正常了, 下面来是, 页面载时, 自动加载进来数据。 获取 数组中,最小的值 5、window.onscroll 绑定方法, 6、 checkScrollsilde 方法,用来计算当前最后一个元素的,高度,是否小于 滚动条的高度, 如果是, 则加载新数据。 */ $(window).on("load",function(){ waterfall(); // 页面加载时, 执行此方法 $(window).on('scroll',function(){ if(checkScrollslide){ //遍历加载开始 var dataInt={"data":[{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"}]}; $.each(dataInt.data,function(key,value){ console.log(value) //alert( $(value).attr('src')) var oDiv=$("<div>").addClass("box").appendTo($("#main")); var oPic=$("<div>").addClass("pic").appendTo($(oDiv)); $("<img>").appendTo($(oPic)).attr('src','img/'+$(value).attr('src')) }) waterfall(); // 遍历出来的元素重新加载样式, } }) }) /* waterfall 方法: 1、 获取父元素下的 元素 box 2\ 计算一个元素的宽度。 3、让算可视区 显示几列 4、给父元素添加 总宽度 居中。 从第二列开始, 重新布局: 5、 遍历第一列中 最小的高度, 把从第二列中的第一个,放到第一列中最小的那个下面, 相对定位那。 */ function waterfall(){ var $boxs=$("#main>div"); var w=$boxs.eq(0).outerWidth(); var cols=Math.floor($(window).width()/w); $("#main").width(w*cols).css('margin','0 auto'); /* 遍历子元素 index 索引 value 值; 1、计算一个元素的高度, 2、 如果是第一列的元素,而放到指定的数组中, 3、如果不是第一列的元素,则给加上样式。、 4、 加上的样式是: 高度,相对定位的属性,LEFT值 , 5、 要加的高度的值:当前数组中的最小值 , 因为这个数组中存的元素的高度, 5、LEFT: 当前元素的 宽度*当前元素的缩索值; 7、加完一个元素后, 数组中的高度重新重计算, 当前列的高度。重新放入数组中, */ var hArr=[]; $boxs.each(function(index,value){ var h=$boxs.eq(index).outerHeight(); if(index<cols){ hArr[index]=h; // 把高度放到 数组中内 }else{ var minH=Math.min.apply(null,hArr); //求数组中最小的值 var minHindex=$.inArray(minH, hArr);// 最小值在数组中的索引 console.log(value); // dom 不能用JQ对像, $(value).css({ 'position':"absolute", 'top':minH+'px', 'left':minHindex*w+'px', }) hArr[minHindex]+=$boxs.eq(index).outerHeight(); } }) } /* checkScrollslide 函数 计算滚动条到底部时,此时要加载新的数据过来。 1、 获取元素的最后一个元素, 2、 计算最后的一个元素的高度, 和当前元素的高度的一半的 和。 3、滚动条的滚出去的高度, 4、 可视区的高度, 5、 return 下 */ function checkScrollslide(){ var $lastBox=$("#main>div").last(); var lastBoxDis=$lastBox.offset().top()+Math.floor($lastBox.outerHeight()/2); var scrollTop=$(window).scrollTop(); var documentH=$(window).height(); return (lastBoxDis<scrollTop+documentH)? true :false; } </script>