瀑布流

二.瀑布流

案例:

<!DOCTYPE html>

<html>

    <head>

        <meta charset="UTF-8">

        <title></title>

        <style type="text/css">

            #box{

                width: 800px;

                border: 1px solid brown;

                border-left: none;

                border-right: none;

                margin: auto;

            }

            .clumb{

                width: 160px;

                /*background: red;*/

                float: left;

            }

        </style>

    </head>

    <body>

        <input type="button" id="btn" value="添加图片" />

        <div id="box">

            <div class="clumb">

            </div>

            <div class="clumb"></div>

            <div class="clumb"></div>

            <div class="clumb"></div>

            <div class="clumb"></div>

        </div>

    </body>

</html>

<script src="../../promiseAjax.js"></script>

<script type="text/javascript">

    var btn = document.getElementById("btn");

    var clumb = document.getElementsByClassName("clumb");

    btn.onclick = function(){

        var pro = promiseAjax({

            method : "get",

            url : "index.json"

        });

        pro.then(function(res){

            var json = JSON.parse(res);

            //console.log(json);

            //var index = 0;

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

                //创建图片标签

                var img = document.createElement("img");

                img.src = json[i].src;

                img.width = 160;//不加style,就不用加px;加了style,就要加px单位。

                img.className = i;

                img.height = json[i].height;

                //clumb[index].appendChild(img);

                //index++;

                /*if(index == 5){

                    index = 0;

                }*/

                

                //1.添加前五张图片到clumb序列中

                if(i < 5){

                    clumb[i].appendChild(img);

                }else{

                    //2.计算得到最短的这一列clumb,

                    var index = getMinHeightIndex();

                    //3.每一次添加,会把图片追加到最短的这一列下面。

                    clumb[index].appendChild(img);

                }

            }

        })

    }

    //计算当前调试最短的列的下标

    function getMinHeightIndex(){

        var minHeightIndex = 0;

        var minHeightEle = clumb[0].offsetHeight;

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

            if(minHeightEle > clumb[i].offsetHeight){

                minHeightEle = clumb[i].offsetHeight;

                minHeightIndex = i;

            }

        }

        return minHeightIndex;

    }

    //4当滚动条滚动到最短的这一列出现留白的时间,图片就开始以瀑布流的方式重新 加载。

    window.onscroll = function(){

        //什么情况算留白呢?

        //滚动条滚走的距离

        var stop = document.documentElement.scrollTop || document.body.scrollTop;

        var t = document.documentElement.clientHeight + stop;

        //获取最短的列

        var index = getMinHeightIndex();

        var h = clumb[index].offsetHeight;

        if( t > h ){

            btn.onclick();

        }

    }

</script>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值