js处理瀑布流布局,移动端

103 阅读1分钟

js处理瀑布流布局,移动端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        html {
            font-size: 16px;
        }
        .box {
            position: relative;
            box-shadow: 0 0 3px #000;
            height: auto;
            margin: 10px;
        }
        .box>img {
            position: absolute;
            margin: 10px 10px 0px 0;
        }
        .box>img:nth-child(2n) {
            margin-right: 0;
        }
    </style>
</head>

<body>
    <!-- 瀑布流加载数据方案 -->
    <div class="box">

    </div>
    <script>
        //定义数组定义图片
        var arr = ["./image/1.jpg", "./image/7.jpg", "./image/4.jpg", "./image/6.jpg", "./image/8.jpg", "./image/3.jpg",
            "./image/2.jpg", "./image/5.jpg","./image/1.jpg", "./image/7.jpg", "./image/4.jpg", "./image/6.jpg", "./image/8.jpg", "./image/3.jpg",
            "./image/2.jpg", "./image/5.jpg"
        ];
        //获取box元素
        var boxele = document.querySelector(".box");
        var num = 2; //限制一行几个的
        var pW = (boxele.clientWidth - 10) / num;
        console.log(pW);
        //准备渲染图片
        var pubu = {
            imageList: arr,
            //初始化方法
            init() {
                //执行创建图片方法
                this.createImage();
            },
            createImage() {
                //假设一次性走8张
                for (var i = 0; i < this.imageList.length; i++) {
                    //创建dom元素
                    var img = document.createElement("img");
                    boxele.appendChild(img);
                    img.src = this.imageList[i];
                    img.className = "face";
                    img.width = pW;
                    //图片默认是定位的关系
                    //在这里计算left  top
                    img.style.left = (i % num * pW + (i % num * 10)) + "px";
                    img.style.top = "0px";
                }
            },
            setTop() {
                //设置元素的top值
                var allface = document.getElementsByClassName("face");
                for (var i = 0; i < allface.length; i++) {
                    //设置元素的top
                    //行的上一个元素
                    var topele;
                    var th = 0;
                    topele = i - num >= 0 ? allface[i - num] : null;
                    th = topele ? topele.offsetHeight + topele.offsetTop : 0;
                    console.log(th);
                    allface[i].style.top = (th) + "px";
                }
            }
        }
        //初始化界面
        pubu.init();
        //浏览器加载完成之后获取元素的高在去设置
        window.onload = function () {
            pubu.setTop();
        }
        //添加一个滚动条事件
        var isshow = true;
        document.addEventListener("scroll", () => {
            if (isshow) {
                console.log("测试");
                // pubu.createImage();
                // pubu.setTop();
                isshow = false;
            }
        });
    </script>
</body>
</html>