瀑布流

理解:瀑布流的实现方法为定位,使用绝对定位的相对定位,改变列的高度及其左边距。首先根据所有的盒模型计算一行可以放得个数,即为最终的列数,比较第一行的每个的高度,则下一行的第一个在最小高度下排列,依次循环排列至结束。(PC端)

知识点:

名称说明
document.body.clientWidth网页可见区域的宽度 
document.body.clientHeight网页可见区域的高度
document.body.offsetWidth网页可见区域的宽,包含边线的宽
doucument.body.offsetHeight网页可见区域的高,包含边线的高
document.body.scrollWidth网页正文全文宽
document.body.scrollHeight网页正文全文高
document.body.offsetTop网页被卷去的高度
document.body.offsetLeft网页被卷去的宽度
window.screenTop网页正文部分上
window.screenLeft网页正文部分左
window.screenWidth屏幕分辨率宽
window.screenHeight屏幕分辨率高
event.pageX||event.pageY鼠标相对于页面左上边缘距离
offset()包含top、left属性,相对于document文档坐标
position()返回包含top、left属性的对象,相对于最近的元素的位置
width()/height()获得或设置元素的宽高
innerWidth()/innerHeight()获取包含内边距的元素宽高,不包含边框
outerWidth()/outerHeight()

                获取整个元素的宽高,包含边框、内边距、内容

outerWidth(true)/outerHeight(true)包含边框、内边距、内容、外边距

具体实现如下:

HTML内容:创建好多个盒模型

    <div id="waterfall">
<!--等宽不等高的模型,任意创建多个-->
<div class="box">
<img src="image/1.jpg"/>
<p>标签:风景</p>
</div>

</div>

CSS内容:注意父集元素的绝对定位,自己元素行排列float:left

JS内容:实现瀑布流布局

window.οnlοad=function(){

            var  boxArr=$(".box"),        //获取布局对象

                   num=Math.floor(document.body.clientWidth / boxArr.eq(0).outerWidth(true)),    //获取列数

                   columnHeight=[];        //定义每一列的对应高度

            //使用for循环实现

            for(var i=0;i<boxArr.length;i++){

                if(i<num){

                        //相当于第一行排列,并且计算每一行的高度

                        columnHeight[i]=$(boxArr[i]).position().top + $(boxArr[i]).outerHeight(true);

                }else{

                    //当开始第二行排列时,先找寻上一行的最低高度及其最低高度索引

                    var minHeight=columnHeight[0],    //假设第一行的最低高度为第一个元素的高度

                          index=0;                                //索引为第一个值0

                   // 开始比较找寻最小高度及其索引

                     for(var j=1;j<num;j++){

                            if(columnHeight[j]<minHeight){

                                    minHeight=columnHeight[j];

                                    index=j;

                            }

                    }

                   //设置下一个值排放的位置

                   $(boxArr[i]).css({

                        position:'absolute',

                        top:minHeight,

                        left:$(boxArr[index]).position().left

                    })

                }

                //最终的列的高度

                columnHeight[index]+=$(boxArr[i]).outerHeight(true);

            }

}

展示效果:


参考对象:

知识点:

参数说明
outerWidth属性为一个只读整数,声明整个窗口的宽度,IE浏览器不支持
eq(index)返回jquery对象,只能jquery操作
get(index)返回DOM对象,只能javaScript操作
$.each(function(index,item))处理数组的下标,item为对象
Math.min.apply()数组中的最小值
apply(obj,args)劫持一个对象的方法,继承另一个对象属性,obj代替function()类中的this对象 ; 数组,作为参数传递给Function()
$.arr(value,array,formIndex)查找指定值数组并返回索引,若未找到返回-1;value要查找的值,array要查找的内容,formIndex数组索引值,表示从那开始查找
  

HTML和CSS如上所示

JavaScript如下所示:

  var boxArr = $('.box'),            //获取盒模型对象
num = Math.floor(document.body.clientWidth / boxArr.eq(0).outerWidth(true)),   //计算列数=可视区域宽度 / 等宽宽度 

columnHeightArr = [];     //定义每一列的高度

   boxArr.each(function(index,item){   //便利所有对象,index为下标,item为便利对象

            if(i<columnHeightArr.length){         //i<定义数组长度(计算值=num) 

                    columnHeightArr[i]=$(item).position().top + $(item).outerHeight(true);   //定义第一行

            }else{

                    //排列剩余的盒对象,找寻第一行下的高度最小的元素及其位置

                    var   minHeight=Math.min.apply(null,columnHeightArr),  //数组中的最小高度值

                            index=$.inArray(minHeight,columnHeightArr);         //数组中对应最小值的位置

                   $(item).css({

                        position:'absolute',

                        top:minHeight,

                        left:boxArr.eq(index).position.left

                })

            }

           columnHeightArr[index]+=$(item).outerHeight(true);

    })

            


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值