jQuery实现瀑布流布局


Posted in Javascript onDecember 12, 2014

HTML

 <div id="main">

         <div class="box">

             <div class="pic">

                 <img src="images/0.jpg" alt="">

             </div>

         </div>

         <div class="box">

             <div class="pic">

                 <img src="images/1.jpg" alt="">

             </div>

         </div>

         <div class="box">

             <div class="pic">

                 <img src="images/2.jpg" alt="">

             </div>

         </div>

         <div class="box">

             <div class="pic">

                 <img src="images/3.jpg" alt="">

             </div>

         </div>

         <div class="box">

             <div class="pic">

                 <img src="images/4.jpg" alt="">

             </div>

         </div>

         <div class="box">

             <div class="pic">

                 <img src="images/2.jpg" alt="">

             </div>

         </div>

 </div>

CSS

 * {

     margin: 0;

     padding: 0;

 }

 #main {

     position: relative;

 }

 .box {

     padding:15px 0 0 15px;

     float:left;

 }

 .pic {

     padding: 10px;

     border: 1px solid #ccc;

     border-radius: 5px;

     box-shadow: 0px 0px 5px #ccc;

     img {

         width:165px;

         height:auto;

     }

 }

JavaScript

 $(window).on("load",function () {

     waterfall();

     var dataInt = { "data":[{"src":"7.jpg"},{"src":"8.jpg"},{"src":"9.jpg"},{"src":"6.jpg"}]}

     //模拟json数据;

     $(window).on("scroll",function () {

         if(checkScrollSlide){

             $.each(dataInt.data,function (key,value) {

                 var oBox=$("<div>").addClass("box").appendTo($("#main"));

                 //jQuery支持连缀,隐式迭代;

                 var oPic=$("<div>").addClass('pic').appendTo($(oBox));

                 $("<img>").attr("src","images/"+$(value).attr("src")).appendTo(oPic);

             });

             waterfall();

         }

     })

 });

 //流式布局主函数;

 function waterfall () {

     var $boxs=$("#main>div");

     //获取#main元素下的直接子元素div.box;

     //获取每一列的宽度;

     var w=$boxs.eq(0).outerWidth();

     //outerWidth()获取包含padding和border在内的宽度;

     //var w=$boxs.eq(0).width();

     //width()只能获取给元素定义的宽度;

     var cols=Math.floor($(window).width()/w);

     //获取多少列;

     $("#main").width(w*cols).css("margin","0 auto");

     //设置#main元素的宽度和居中样式;

     var hArr=[];

     //每一列高度的集合;

     $boxs.each(function (index,value) {

     //遍历每一个box元素;

     //为了找到之前所有元素的最低点,然后将本元素设置到最低点之下;

         var h=$boxs.eq(index).outerHeight();

         //每一个box元素的高,

         if (index<cols) {

             hArr[index]=h;

             //确定每列第一个元素的高度;

         } else{

             var minH=Math.min.apply(null,hArr);

             //得出列高数组中的最小高度;

             var minHIndex=$.inArray(minH,hArr);

             //$.inArray()方法得出元素(minH)在数组(hArr)中的index值;

             //console.log(value);

             //此时的value是第一行之后的所有的box元素的DOM对象!;

             $(value).css({

             //$(value):将DOM对象转换成jQuery对象,才能继续使用jQuery方法;

                 "position":"absolute",

                 "top":minH+"px",

                 "left":minHIndex*w+"px"

             });

             hArr[minHIndex]+=$boxs.eq(index).outerHeight();

             //最低高元素的高度+刚添加到最低高度下的元素的高度=新的列高;

         };

     });

     // console.log(hArr);

 };

 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;

 }

详细解释清仔细参考注释吧,我就不单独再拉出来写了。

Javascript 相关文章推荐
JQuery里面的几种选择器 查找满足条件的元素$(&quot;#控件ID&quot;)
Aug 23 Javascript
jQuery学习笔记(2)--用jquery实现各种模态提示框代码及项目构架
Apr 08 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
js转义字符介绍
Nov 05 Javascript
jquery中的过滤操作详细解析
Dec 02 Javascript
jquery制作图片时钟特效
Mar 30 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
Mar 09 Javascript
详解webpack分离css单独打包
Jun 21 Javascript
关于jquery form表单序列化的注意事项详解
Aug 01 jQuery
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
Feb 26 Javascript
小程序从手动埋点到自动埋点的实现方法
Jan 24 Javascript
layui 上传图片 返回图片地址的方法
Sep 26 Javascript
jquery+ajax验证不通过也提交表单问题处理
Dec 12 #Javascript
js 左右悬浮对联广告代码示例
Dec 12 #Javascript
原生JavaScript+LESS实现瀑布流
Dec 12 #Javascript
jquery禁止回车触发表单提交
Dec 12 #Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
Dec 12 #Javascript
windows8.1+iis8.5下安装node.js开发环境
Dec 12 #Javascript
jQuery 和 CSS 的文本特效插件集锦
Dec 12 #Javascript
You might like
PHP操作文件方法问答
2007/03/16 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
如何实现修改密码时密码框显示保存到cookie的密码
2013/12/10 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
原生实现一个react-redux的代码示例
2018/06/08 Javascript
vue实现记事本功能
2019/06/26 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
Bootstrap告警框(alert)实现弹出效果和短暂显示后上浮消失的示例代码
2020/08/27 Javascript
Python将阿拉伯数字转换为罗马数字的方法
2015/07/10 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
PyQt5实现简单的计算器
2020/05/30 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
python 实现波浪滤镜特效
2020/12/02 Python
Python爬取你好李焕英豆瓣短评生成词云的示例代码
2021/02/24 Python
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
adidas泰国官网:adidas TH
2020/07/11 全球购物
init进程的作用
2015/08/20 面试题
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
公司营业员的工作总结自我评价
2013/10/05 职场文书
2014年开学第一课活动方案
2014/03/06 职场文书
小学生作文评语大全
2014/04/21 职场文书
检查机关领导群众路线教育实践活动个人整改措施
2014/10/28 职场文书
承诺书范本
2015/01/21 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
Python可视化学习之seaborn调色盘
2022/02/24 Python