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 操作文件 实现方法小结
Jul 02 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
Oct 21 Javascript
autoPlay 基于jquery的图片自动播放效果
Dec 07 Javascript
js获得鼠标的坐标值的方法
Mar 13 Javascript
html5的自定义data-*属性和jquery的data()方法的使用示例
Aug 21 Javascript
javascript trim函数在IE下不能用的解决方法
Sep 12 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
Vue动态实现评分效果
May 24 Javascript
react-native中ListView组件点击跳转的方法示例
Sep 30 Javascript
原生JS实现列表子元素顺序反转的方法分析
Jul 02 Javascript
javascript使用substring实现的展开与收缩文字功能示例
Jun 17 Javascript
JavaScript实现PC端横向轮播图
Feb 07 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 中文处理函数集合
2008/08/27 PHP
openPNE常用方法分享
2011/11/29 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
2010/12/12 Javascript
jQuery的初始化与对象构建之浅析
2011/04/12 Javascript
js控制的遮罩层实例介绍
2013/05/29 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
2013/11/07 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
javascript实现checkBox的全选,反选与赋值
2015/03/12 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
javascript事件模型介绍
2016/05/31 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
JavaScript 对引擎、运行时、调用堆栈的概述理解
2018/10/22 Javascript
vue实现form表单与table表格的数据关联功能示例
2019/01/29 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
jquery使用echarts实现有向图可视化功能示例
2019/11/25 jQuery
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
python BeautifulSoup使用方法详解
2013/11/21 Python
使用Python发送各种形式的邮件的方法汇总
2015/11/09 Python
python的构建工具setup.py的方法使用示例
2017/10/23 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
python基于递归解决背包问题详解
2019/07/03 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
python实现简单学生信息管理系统
2020/04/09 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
巴西购物网站:Submarino
2020/01/19 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
放假通知格式
2015/04/14 职场文书
奖励通知
2015/04/22 职场文书
2015年小学二年级班主任工作总结
2015/05/21 职场文书
Python实现拼音转换
2021/06/07 Python