title: js实现瀑布流
date: 2019-09-07 07:32:21
tags: Html
categories:

  • 前端

直接抄代码即可

<!DOCTYPE html>
<html lang="en">
<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">
    <title>fall</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        body{
            display: flex;
            justify-content: space-around;  
        }
        li{
            float: left;
            list-style: none;
            margin-right: 10px;
            width:300px;
        }
        .clear::after{
            content:'';
            display: block;
            height: 0;
            clear: both;
        }
        img{
            padding-top: 10px;
        }

    </style>
</head>
<body>
    <div id="wrapper">
        <ul class="clear">
            <li class="col"></li>
            <li class="col"></li>
            <li class="col"></li>
        </ul>
    </div>
    <script>
        function getData(data){
            data = [];
            for(var i=0; i<9; i++){
                data.push("images/fall/"+i+".jpg")
            }
            return data;
        }
        

        function getMinHeight(){
            const oLi = document.getElementsByClassName("col");
            let index = 0;
            let oH = oLi[index].offsetHeight;
            for(let i=0; i<oLi.length; i++){
                if(oLi[i].offsetHeight <= oH){
                    index=i;
                    oH = oLi[i].offsetHeight;
                }
            }
            return index;
        }

        function appendDom(data){
            const container = document.getElementsByClassName("col");
            data.forEach((item,index)=>{
                const img = new Image();
                img.src = item;
                img.width = 300;
                // console.log(img)
                container[getMinHeight()].appendChild(img);
            })
        }
        
        const vH = document.documentElement.clientHeight; // 视口高度
        document.onscroll = function(){
            let sT = document.documentElement.scrollTop || document.body.scrollTop; // 谷歌不同版本的滚动高度
            if(sT + vH >= 0.8* document.body.scrollHeight){ // *0.8 的目的是防止出现白块,scrollHeight是元素的css固有高度(包括被父元素挡住的部分)
                appendDom(getData())
            }
        }

        appendDom(getData());
        </script>
</body>
</html>