瀑布流

7 篇文章 0 订阅

结构层

<section class="box">
            <figure>
                <img src="image/1.jpg" />
            </figure>
            <figure>
                <img src="image/image11.png" />
            </figure>
            <figure>
                <img src="image/3.jpg" />
            </figure>
            <figure>
                <img src="image/image10.png" />
            </figure>
            <figure>
                <img src="image/5.jpg" />
            </figure>
            <figure>
                <img src="image/image9.png" />
            </figure>
</section>

表现层

       <style>
         *{margin: 0;padding: 0;}
         img{width:300px;display: block;}
          figure{display: block;float:left;}
        </style>

行为层

$(document).ready(function(){
    $(window).ready(function(){
       imgLocation();
    });
});

function  imgLocation(){
    var box =$("figure");
    var boxWidth  = box.eq(0).width(); //得到元素的宽度
    var windowWidth = $(window).innerWidth(); //屏幕的宽度
    var num = Math.floor(windowWidth /boxWidth );//每行几个图片
    var boxArry =[]; //用来存储高度
    box.each(function(index,value){
        var boxHeight = box.eq(index).height();
        if(index<num  ){
            boxArry[index]=boxHeight; //将盒子高度数值存入数组  
        }else{
           var minboxHeight= Math.min.apply(null,boxArry);
           var minboxIndex = $.inArray(minboxHeight,boxArry)//最下高度盒子所在的位置
           $(value).css({
               "position":"absolute",
               "top": minboxHeight  ,
               "left": box.eq(minboxIndex).position().left   
           });
           boxArry[minboxIndex]+=box.eq(minboxIndex).height();//变化最小值得高度
        } 
    })

}




再做一个图片加载的效果

function imgLoad(){
    var box=$("figure");
    var lastboxHeight = box.last().get(0).offsetTop + Math.floor( box.last().height()/2   ); //获取最后一列的长度
    var documentHeight = $(document).width();
    var scrollHeight = $(document).scrollTop();
    return( lastboxHeight < documentHeight+ scrollHeight  )?true:false;
}

该变开始的代码

$(document).ready(function  () {
    $(window).on("load",function  () {
        imgLocation();
        var dataimg={ "data" :[{"src":"photo1.png"},{"src":"image11.png"} ] }
        window.onscroll =function  () {
            if ( scrollSlide()  ) {
                $.each(dataimg.data, function(index,value) {    
                    var box = $("figure").appendTo( $(".box")  );
                    //console.log( "img/" + $(value).attr("src")  ); 打印出具体的图片对象
                    $("<img />").attr("src","image/" + $(value).attr("src")  ).appendTo(box);
                });
                imgLocation();
            }
        }
    })
});

对于本文中用到的方法进行一些说明:

1 Math.floor() 小数值舍入为整数
Math.ceil()、Math.floor() 、Math.round()
Math.ceil()执行向上舍入,即它总是将数值向上舍入为最接近的整数;
Math.floor()执行向下舍入,即它总是将数值向下舍入为最接近的整数;
Math.round()执行标准舍入,即它总是将数值四舍五入为最接近的整数(这也是我们在数学课上学到的舍入规则)

2 Math.min()
此方法返回指定数字中较小的一个。
注:如果没有参数,则返回Infinity。如果有某个参数为NaN,或是不能转换成数字的非数字值,则返回NaN。

console.log(Math.min(NaN,5));//输出结果:NaN。

console.log(Math.min(4,5));//输出结果:4。

本文中在使用Math.min时,是对一个数组,寻找其中的最小值得时候。

    var minboxHeight = Math.min.apply(null , boxArry);

注意,如果你这么写

var a=[2,6,7];
console.log(Math.min(a) ) // 输出结果:NaN。
console.log(Math.min.apply(null, a)) //输出为2

*此时可以看出,apply将数组扁平化了。
对于可变参数函数,当参数个数和参数值在运行期才能确定时,通过将值放入数组,通过 apply 来间接调用是个很有用的方法。
比如,要求最小值的一组数,它们的个数以及具体数值,在写代码时无从知晓,它们是代码跑起来之后动态生成的,这时候就无法在写代码时直接调用 min 函数,这时候 apply 就派上用场了。*
以上是经过向以为大神请教后得知的,在此非常感谢。
参考网址:http://www.cnblogs.com/Liok3187/p/4602386.html

3 inArray

var minboxIndex = $.inArray(minboxHeight,boxArry); //返回符合数值的位置  图片高度最小的那一个

jquery inarray()函数详解
jquery.inarray(value,Array)
确定第一个参数在数组中的位置(如果没有找到则返回 -1 )。

4 each()

box.each(function(index,value){
  ......
})

遍历每一个box,你可以试试

console.log(index + "content is" + value )

看看可以得出什么东西


第二种方法做瀑布流(有点假)


结构层

<div id="container">



    <ul class="col">
        <li><img src="img/1.jpg" alt=""/></li>
        <li><img src="img/0.jpg" alt=""/></li>
        <li><img src="img/3.jpg" alt=""/></li>
        <li><img src="img/1.jpg" alt=""/></li>
   </ul>

    <ul class="col"></ul>

    <ul class="col"></ul>

样式


#container{width:940px;margin:50px auto;}
#container ul{width:300px;list-style:none;float:left;margin-right:20px;}
#container ul li{margin-bottom:10px;}
#container ul li img{width:300px;}

行为层


function loadMeinv(){
        var data = 0;

        for(var i=0;i<9;i++){//每次加载时模拟随机加载图片

            data = parseInt(Math.random()*9);

            var html = "";

            html = '<li><img src = img/'

                    +data+'.jpg></li>';

            $minUl = getMinUl();

            $minUl.append(html); //或者$(html).appendTo( $minUl)

        }

}

loadMeinv();



//寻找
function   getMinUl(){
        var $arrUl = $("#container .col");

        var $minUl =$arrUl.eq(0);

        $arrUl.each(function(index,elem){

            if($(elem).height()<$minUl.height()){

                $minUl = $(elem);

            }

        });

        return $minUl; //高度最小的ul

}


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

        $minUl = getMinUl();

        if($minUl.height() <= $(window).scrollTop()+$(window).height()){

        //当最短的ul的高度比窗口滚出去的高度+浏览器高度大时加载新图片

            loadMeinv();

        }

    })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值