zoukankan      html  css  js  c++  java
  • js瀑布流布局

      当我们要在很多地方用到的时候,这时候我们不妨把js封装成对象的方式,好处会有很多。定义对象的方式有5种,最简单的单例模式,工厂模式,构造函数模式,原型模式和混合模式。

    这里我们最常用的就是混合模式了,他继承了以上所有的优点,实用灵活。看一个小例子,希望可以对你的理解有点帮助;

    这里模拟了一个加载更多插入原瀑布流的方法,子集的宽高是参数可以在window.onresize里面实现随着窗口变化而改变

    /*  需传参数
    father : "waterFall" //父级ID
    chilsNum :20, //子集个数
    child : "box", //子集类名
    childWidth : 200, //子集宽度
    fatherWidth : 1100, //父级宽度
    heightPdding : 10, //子集上下间距
     */
        function waterFall(opations){
                this.father = document.getElementById(opations.father);
                this.liNum = 0;
                this.childs = this.father.children;
                this.liWidth =  opations.childWidth || this.childs[0].offsetWidth;
                this.fatherWidth = opations.fatherWidth || this.father.offsetWidth;
                this.childNum = 0;
                this.padding =0;
                this.heightPdding =opations.heightPdding;
                this.arrHeight = [];
                this.minHeight = 0;
                this.maxHeight = 0;
                this.minIdx = 0;
                this.init();
            }
            waterFall.prototype = {
                init:function(){
                    this.mune();
                    for(var y = 0; y < this.liNum;y++){
                        this.childs[y].style.position = "absolute";
                        this.childs[y].style.width = this.liWidth +"px";
                        if(y < this.childNum){
                            this.childs[y].style.left = (this.liWidth*y+this.padding*(y+1))+"px";
                            this.childs[y].style.top = this.heightPdding+"px";
                            this.arrHeight.push(parseInt(this.childs[y].offsetHeight)+this.heightPdding*2)
                        }else{
                            var b = Math.floor(y/this.childNum);
                            this.minHeight = Math.min.apply(null,this.arrHeight);
                            this.minIdx = this.fountMin();
                            this.childs[y].style.left = (this.liWidth*this.minIdx+this.padding*(this.minIdx+1))+"px";
                            this.childs[y].style.top = this.minHeight +"px";
                            this.arrHeight[this.minIdx] += parseInt(this.childs[y].offsetHeight)+this.heightPdding;
                        }
                    }
                    this.maxHeight = Math.max.apply(null,this.arrHeight);
                    this.father.style.height = this.maxHeight+ "px";
                    this.father.style.position = "relative";
                    this.father.style.width = this.fatherWidth+ "px";
                },
                mune:function(){
                    this.childNum = Math.floor(this.fatherWidth/this.liWidth);
                    this.padding = parseInt(this.fatherWidth - this.liWidth*this.childNum)/(this.childNum+1);
                    this.liNum = this.childs.length;
                },
                fountMin:function(){
                    for(x in this.arrHeight){
                        if(this.minHeight == this.arrHeight[x]){
                            return parseInt(x);
                        }
                    }
                },
            }
  • 相关阅读:
    Linux阶段总结
    Java基础单词总结
    毕业设计
    tips: ubuntu apt sources.list 设置
    Java编程从0到1系列 目录
    EnvironmentError: mysql_config not found
    pyenv 2.7 环境安装MySQL-python ERROR
    dtd语法规则
    HashMap和HashTable之间的区别
    Vector(同步)和ArrayList(异步)异同
  • 原文地址:https://www.cnblogs.com/chengjunL/p/6086667.html
Copyright © 2011-2022 走看看