• js瀑布流


    <!DOCTYPE html>
    <html lang="zh">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #main{
                margin: 15px auto;
                position: relative;
            }
            .box{
                padding: 15px 0 0 15px;
                float: left;
            }
            .pic{
                padding: 15px;
                border: 1px solid #ccc;
                box-shadow: 0 0 5px #ccc;
                border-radius: 5%;
            }
            .box .pic img{
                width: 168px;
            }
        </style>
        <title>瀑布流-页面布局结构</title>
    </head>
    <body>
        <div id="main">
            <div class="box">
                <div class="pic"><img src="img/pubuliu/1.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/2.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/3.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/4.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/5.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/6.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/7.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/8.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/9.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/10.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/11.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/12.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/13.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/14.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/15.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/16.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/17.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/18.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/19.jpg" ></div>
            </div>
            <div class="box">
                <div class="pic"><img src="img/pubuliu/20.jpg" ></div>
            </div>
        </div>
    </body>
    <script type="text/javascript">
        //写入waterfall函数,为了两次调用 1刷新页面加载一次 2拖动滚动条的时候加载一次
        window.onload=function(){
            waterfall("main","box");
            }
        function waterfall(parent,box){
            var oParent=document.getElementById(parent) //获取#main
            var oBox=getClass(box) //获取box
            // main的宽:页面可视区域/单个图片的宽,用单个图片的宽*总个数
            var width=document.documentElement.clientWidth || document.body.clientWidth //可视区域的宽
            var oBoxWidth=oBox[0].offsetWidth    //获取图片的宽度
            var num = Math.floor(width/oBoxWidth)     //可视区域可以放多少个图片(去掉小数点后的数)
            oParent.style.width=num*oBoxWidth+'px'    //main的宽度
            // 下标*图片宽度=left   上面图片的高度=top    每下一排的第一个放到上一排空最大的地方,以此类推
            var hrr=[];    //存储图片的高度
            for(var i=0;i<oBox.length;i++){
                if(i<num){    //如果没有超出一行的个数
                    hrr.push(oBox[i].offsetHeight)
                }else{
                    // hrr数组中最小值的下标位置
                    var min=Math.min.apply(null,hrr) //hrr里面的最小值
                    // console.log(min)
                    var index=inArray(hrr,min)
                    // console.log(index)
                    // console.log(index*oBoxWidth)
                    oBox[i].style.position="absolute"
                    oBox[i].style.left=index*oBoxWidth+'px'
                    oBox[i].style.top=min+'px'
                    hrr[index]=hrr[index] + oBox[i].offsetHeight
                }
            }
            function inArray(hrr,min){    ///循环hrr里的每一个值,如果某个和最小值min相等,返回i下标
                for(var i=0;i<hrr.length;i++){
                    if(hrr[i]==min){
                        return i
                    }
                }
            }
        }
        function getClass(box){    //获取class名称节点的函数
            // 1 把页面上所有的节点获取到
            // 2 循环遍历所有节点,进行条件判断
            // 3 符合要求的节点放入到数组中
            var doms=document.getElementsByTagName('*')
            var reg=new RegExp("\b"+box+"\b")
            var arr=[]
            for(var i=0;i<doms.length;i++){
                if(reg.test(doms[i].className)){
                    arr.push(doms[i])
                }
            }
            return arr
        }
    </script>
    </html>
  • 相关阅读:
    bzoj 3944 Sum
    [BZOJ2693]jzptab
    luogu 3768 简单的数学题
    [ZJOI2015]幻想乡战略游戏
    [SDOI2017]数字表格
    [ZJOI2007]Hide 捉迷藏
    [SDOI2016]游戏
    [SPOJ10707]Count on a tree II
    [Luogu4177][CEOI2008]order
    [BZOJ4491]我也不知道题目名字是什么
  • 原文地址:https://www.cnblogs.com/yueranran/p/12516337.html
Copyright © 2020-2023  润新知