瀑布流

来源:互联网 发布:外链js文件 编辑:程序博客网 时间:2024/04/29 22:32

结构层

<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();        }    })
0 0
原创粉丝点击