
瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。最早采用此布局的网站是Pinterest,逐渐在国内流行开来。国内大多数清新站基本为这类风格。
waterwall.js $(function(){ WaterWall("main","box"); Add_WaterWall_ScrollEvent("main","box"); }) function WaterWall(Id_name,Class_name) { var Box_Array = $("#"+ Id_name + ">." + Class_name); //获取所有的Box对象数组 ]).innerWidth(); //获取Box的宽度.一定要包含Padding的数值 var Cols = Math.floor($(document).width() / Box_Width); $("#"+ Id_name ).css({"width":Cols * Box_Width,"margin":"auto"}); //设置Main的宽度并且居中 var Height_Array = [] ;//存放每个列的的高度的数组 ;i<Box_Array.length;i++) { if(i<Cols) //将第一行作为列高度的初始值添加到数组中 { Height_Array.push($(Box_Array[i]).innerHeight()); } else { var min = Math.min.apply(null,Height_Array); //获取列高度数组中最小值 var min_index = get_index(Height_Array,min); //获取指定数组中的最小值的索引 $(Box_Array[i]).css({"position":"absolute","top":min,"left":Box_Width * min_index + "px"}); Height_Array[min_index] += $(Box_Array[i]).innerHeight(); } } } //获取指定数组中的最小值的索引 function get_index(arr,val) { for(var i in arr) { if(arr[i] == val) { return i; //获取列高度数组中最小值的索引 } } } function Add_WaterWall_ScrollEvent(Id_name,Class_name) { //绑定一个滚动事件 $(window).scroll(function() { var Box_Array = $("#"+ Id_name + ">." + Class_name); //获取所有的Box对象数组 //最后一个box距离顶部的距离 + 图片的一半高度 ).offset().top + $(Box_Array).eq(Box_Array.length - ).innerHeight() / ) ; var scrolltop = $("body,html").scrollTop(); //浏览器拖动的距离 var see_height = document.body.clientHeight || document.documentElement.clientHeight; //浏览器可视距离 if(lastbox_height < Math.floor(scrolltop +see_height)) { var temp = _.template($("#temp").html()); //模板 var data = { "img":[ {"src":"Images/P_00.jpg"}, {"src":"Images/P_01.jpg"}, {"src":"Images/P_02.jpg"}, {"src":"Images/P_03.jpg"}, {"src":"Images/P_04.jpg"}, {"src":"Images/P_05.jpg"}, {"src":"Images/P_06.jpg"}, {"src":"Images/P_07.jpg"}, {"src":"Images/P_08.jpg"} ], "text":[ {"title":"Images/P_00.jpg"}, {"title":"Images/P_01.jpg"}, {"title":"Images/P_02.jpg"}, {"title":"Images/P_03.jpg"}, {"title":"Images/P_04.jpg"}, {"title":"Images/P_05.jpg"}, {"title":"Images/P_06.jpg"}, {"title":"Images/P_07.jpg"}, {"title":"Images/P_08.jpg"} ] }; //模拟后台JSON数据 ;i<data.img.length;i++) { $("#"+ Id_name).append ( temp({ src : data.img[i].src }) ) } WaterWall(Id_name,Class_name); } }) } html: <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title></title> <link rel="stylesheet" href="Css/Basic.css" /> <script type="text/javascript" src="Js/jquery-2.1.1.min.js"></script> <script type="text/javascript" src="Js/underscore-min.js"></script> <script type="text/javascript" src="Js/waterwall.js"></script> <style type="text/css"> #main { position:relative; } .box { float:left; padding:15px 0px 0px 15px; /* 只需要上,左两个方向的间隔即可 */ } .pic { border:1px solid #ccc; padding:10px; border-radius:15px; box-shadow:0px 0px 15px #ccc; } .pic>img { width:165px; height:auto; } </style> </head> <body> <div id="main"> <div class="box"> <div class="pic"> <img src="Images/P_00.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_01.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_02.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_03.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_04.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_05.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_06.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_07.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_08.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_09.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_010.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_011.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_012.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_013.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_014.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_015.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_016.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_017.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_018.jpg" alt="" /> </div> </div> <div class="box"> <div class="pic"> <img src="Images/P_019.jpg" alt="" /> </div> </div> </div> </body> </html> http://www.imooc.com/learn/101