瀑布流布局——jquery
2015-08-29 11:13
721 查看
首先确定定位,因为.box的宽度是确定的,根据屏幕的宽度来调整.box的列数,所以#content的宽度是随着.box的列数变化而变化的,并且需要保持相对于body居中。
因此需要给#content添加定位position: relative;
而.box的定位第一行relative没问题,除了第一行,其他行都是需要调整其top和left,使他们补齐和对其,因此其他行的定位需要absolute。
因此.box不需要设定position,后期动态为第二行以上的添加absolute。
.box之间的位移选择使用padding,因为这容易计算实际宽度和高度,后面需要用到。
function waterfall(){ //先计算单个box的宽度,再计算当前窗口可以放下几列box var boxwidth=$(".box").outerWidth(); var boxcol=Math.floor($("body").width()/boxwidth); //调整#content的宽度,使其与box的总宽度匹配,并相对窗口居中 $("#content").width(boxcol*boxwidth).css("margin","0 auto"); //初始一个数组,用于存放每一列box的总高度 var arr=[]; //对所有box进行遍历,执行box的定位工作 $(".box").each(function(i,a){ //第一行无需定位,只需要得到初始高度值 if(i<boxcol){ arr[i]=$(this).outerHeight(); } //第二行以上需要为每一个box定位,定位规则是前一行的总高度最小的box列优先排放 else{ //找到所有列的总高度的最小值 var minHeight=Math.min.apply(null,arr); //找到最小高度列的索引值 var minIndex=$.inArray(minHeight,arr); //对当前遍历对象执行绝对定位,top为最小高度列的值,left为最小高度列当前的left $(this).css({ 'position':'absolute', 'top':minHeight+'px', 'left':minIndex*boxwidth+'px' }); //重置最小高度列的值,需加上当前遍历对象的高度 arr[minIndex]+=$(this).outerHeight(); } }); }
相关文章推荐
- jquery网页加载进度条NProgress.js
- jquery制作拉开帷幕特效
- Jquery extend 函数的 用法 解析
- Jquery cookie
- [转载]jquery中attr和prop的区别
- 用jQuery File Upload做的上传控件demo,支持同页面多个上传按钮
- jquery专业的导航菜单特效代码分享
- play frameword 如何实现在页面表单效验用户名是否存在
- jQuery插件——x-editable表单字段实时编辑)——提交的参数params问题
- jQuery插件——x-editable表单字段实时编辑)——getstart
- jQuery插件——x-editable表单字段实时编辑)——Validator校验,编辑成功提示
- jQuery插件——x-editable表单字段实时编辑)——自己写的demo
- jQuery插件——x-editable表单字段实时编辑)——编辑框的位置
- jQuery插件——x-editable表单字段实时编辑)——class样式
- jQuery插件——x-editable表单字段实时编辑)——自定义编辑框
- jQuery插件——x-editable表单字段实时编辑)——官网,官网demo
- 不定义JQuery插件,不要说会JQuery
- jquery hover延时
- HTML系列(HTMl+CSS+JavaScript+Jquery)--un
- js jquery版本的 金额千分位转换函数(非正则,效率极高)