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 相关文章推荐
javascript知识点收藏
Feb 22 Javascript
Mootools 1.2教程 类(一)
Sep 15 Javascript
jQuery EasyUI API 中文文档 - ComboGrid 组合表格
Oct 13 Javascript
图片img的src不变让浏览器重新加载实现方法
Mar 29 Javascript
js 实现 input type=&quot;file&quot; 文件上传示例代码
Aug 07 Javascript
jQuery实现带延迟效果的滑动菜单代码
Sep 02 Javascript
javascript中eval和with用法实例总结
Nov 30 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
Web安全测试之XSS实例讲解
Aug 15 Javascript
knockoutjs模板实现树形结构列表
Jul 31 Javascript
原生JS实现手动轮播图效果实例代码
Nov 22 Javascript
说说Vue.js中的functional函数化组件的使用
Feb 12 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页面跳转代码 输入网址跳转到你定义的页面
2013/03/28 PHP
php读取mysql的简单实例
2014/01/15 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
jquery选择符快速提取web表单数据示例
2014/03/27 Javascript
Jquery插件分享之气泡形提示控件grumble.js
2014/05/20 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
AngularJS 中使用Swiper制作滚动图不能滑动的解决方法
2016/11/15 Javascript
通过Ajax使用FormData对象无刷新上传文件方法
2016/12/08 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
浅谈Angular2 模块懒加载的方法
2017/10/04 Javascript
vue中的计算属性的使用和vue实例的方法示例
2017/12/04 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
vue中使用微信公众号js-sdk踩坑记录
2019/03/29 Javascript
python操作xml文件详细介绍
2014/06/09 Python
python的类变量和成员变量用法实例教程
2014/08/25 Python
Python如何调用JS文件中的函数
2019/08/16 Python
Pytorch实现神经网络的分类方式
2020/01/08 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
Anaconda+Pycharm环境下的PyTorch配置方法
2020/03/13 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
意大利奢侈品牌在线精品店:Jole.it
2020/11/23 全球购物
英文版银行求职信
2013/10/09 职场文书
市场营销专业自荐书
2014/06/10 职场文书
餐厅周年庆活动方案
2014/08/25 职场文书
优秀小学生事迹材料
2014/12/26 职场文书
担保书格式范文
2015/09/22 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python
MySQL常用慢查询分析工具详解
2022/08/14 MySQL