zoukankan      html  css  js  c++  java
  • js面向对象实现瀑布流

    <!DOCTYPE html>
    <html lang="en">

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <style>
            div {
                 200px;
                position: absolute;
            }
        </style>
    </head>

    <body>

    </body>

    </html>
    <script>
        class waterfall {
            creatDiv() {
                for (let i = 0; i < 14; i++) {//循环图片
                    let odiv = document.createElement("div");//创建div
                    let rad = Math.round(Math.random() * 300 + 50);//取50-350之间的随机数
                    odiv.style.height = rad + "px";//给div设置随机高度
                    odiv.style.backgroundImage = "url(./img/" + i + ".jpg)";//给div设置图片背景
                    odiv.style.backgroundSize = "200px " + rad + "px";//给div的背景图设置大小(如:200px 330px)
                    odiv.style.left = odiv.offsetWidth + 10 + "px";//设置每个div的宽度加间隔
                    document.body.appendChild(odiv);//将创建的div加到body中
                    this.change();//创建的同时执行change();
                }
            }
            change() {
                let odiv = document.querySelectorAll("div");//得到所有的div
                let n = Math.floor(window.innerWidth / 210);//判断一行可以放几个div
                let arrH = [];//创建空数组用来装第一行的高度
                for (let i = 0; i < odiv.length; i++) {//循环每个div
                    if (n == arrH.length) {//第一行之外的
                        let minIndex = this.minIndex(arrH);//找到数组中最小值的索引
                        odiv[i].style.left = minIndex * 210 + "px";//将div加在最小高度div的下面
                        odiv[i].style.top = arrH[minIndex] + 10 + "px";//将div加在最小高度div的下面
                        arrH[minIndex] += odiv[i].offsetHeight;//将每次加的最小div的高度累加
                    } else {//判断第一行,将前六个的div高度加在数组中
                        odiv[i].style.top = 0 + "px";//第一行div的Top
                        odiv[i].style.left = i * 210 + "px";//第一行div的left
                        arrH[i] = odiv[i].offsetHeight;//数组前六个为前6个div的高度
                    }
                }
            }
            minIndex(a) {//找数组中的最小值
                let minIndex = 0
                for (let i = 0; i < a.length; i++) {
                    if (a[i] < a[minIndex]) {
                        minIndex = i;
                    }
                }
                return minIndex;
            }
            onscroll() {
                let that = this;
                window.onscroll = function () {//鼠标滚动事件,前提是有滚动条产生时才能出发该事件
                    let scTop = document.body.scrollTop || document.documentElement.scrollTop;
                    if (scTop > 10) {
                        that.creatDiv();
                    }
                }
            }
        }
        let wf = new waterfall();
        wf.creatDiv();
        wf.change();
        wf.onscroll()
    </script>
  • 相关阅读:
    Android 在Java代码中设置style属性使用代码创建ProgressBar对象
    编写高效的Android代码(提高运行速度,节省电量)
    Android动态加载——加载已安装APK中的类
    使用NDK移植开源项目,JNI的使用技巧
    [随便写写]Android基础教程
    Android 通过按键旋转屏幕
    struts2中获取request、response,与android客户端进行交互
    Oracle配置监听和连接,已经一些比较容易混淆的相关概念
    Oracle Profile 使用详解
    VS.NET(VC++风格)常用快捷键 && UltraEdit常用快捷键
  • 原文地址:https://www.cnblogs.com/bwnnxxx123/p/13089754.html
Copyright © 2011-2022 走看看