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

         瀑布流布局,似乎一夜之间出现在国内外大大小小的网站上,比如 Pinterest (貌似是最早使用这种布局的网站了),Mark之蘑菇街点点网,以及淘宝最新上线的“哇哦” 等等,倒是很流行哈~ 在淘宝即将上线的众多产品中,你还会大量看到这样的形式呢。

    这种布局适合于小数据块,每个数据块内容相近且没有侧重。通常,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部。所以,我们给这样的布局起了一个形象的名字 —瀑布流式布局

      而下面是用绝对定位做的瀑布流布局

         效果预览

    <div class="main" id="main">
            <div class="box"><div class="pic"><img src="img/1.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/2.jpg"> </div></div>
            <div class="box"><div class="pic"><img src="img/3.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/4.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/5.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/6.jpg"> </div></div>
            <div class="box"><div class="pic"><img src="img/7.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/8.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/9.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/10.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/11.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/12.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/13.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/14.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/15.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/16.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/17.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/18.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/19.jpg"></div></div>
            <div class="box"><div class="pic"><img src="img/20.jpg"></div>
            </div>
        </div>
    *{margin:0; padding:0;}
    
    .main{position:relative;}
    
    .box{padding:15px 0 0 15px; float:left;}
    
    .pic{
        padding:10px;
        border:1px solid #ccc;
        border-radius:5px;
        box-shadow:0 0 5px #ccc;
    }
    .pic img{
        225px;
        height:auto;
        }
    // JavaScript Document
    
    window.onload =function(){
        waterfall('main','box');
        var dataInt = {"data":[{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"}]};
    /*    window.onscroll = function(){
            if(checkScrollSlide){
                var oParent  = document.getElementById('main');
                //按需加载
                for(var i=0;i<dataInt.data.length;i++){
                    var oBox = document.createElement("div");
                    oBox.className = 'box';
                    oParent.appendChild(oBox);
                    var oPic = document.createElement("div");
                    oPic.className = 'pic';
                    oBox.appendChild(oPic);
                    var oImg = document.createElement("img");
                    oImg.src="img/" + dataInt.data[i].src;
                    oPic.appendChild(oImg);
                }    
            }
            
        }*/
    }
    
    
    function waterfall(parent,box){
        var oParent  = document.getElementById(parent);
        var oBoxs = getByClass(oParent,box);    
        var boxWidth = oBoxs[0].offsetWidth;
        var cols = Math.floor(document.documentElement.clientWidth/boxWidth);
        //document.getElementsByTagName("body")[0].offsetWidth;
        //console.log(document.documentElement.clientWidth);
        oParent.style.cssText = '' + cols*boxWidth + "px;margin:0 auto;";
        
        var hArr = [];
        for(var i=0;i<oBoxs.length;i++){
            if(i<cols){
                hArr.push(oBoxs[i].offsetHeight);    
            }    
            else{
                var minH = Math.min.apply(null,hArr);    
                var index= getMinhIndex(hArr,minH);
                oBoxs[i].style.cssText = 'position:absolute;Top:'+minH+"px;left:"+ oBoxs[index].offsetLeft+"px";
                hArr[index] += oBoxs[i].offsetHeight;
            }
            
        }
    }
    
    function getByClass(parent,className){
        var boxArr = new Array();
        var oElements = document.getElementsByTagName("*");
        for(var i=0 ; i<oElements.length;i++){
            if(oElements.item(i).className == className){
                boxArr.push(oElements[i]);    
            }
        }    
        return boxArr;
    }
    
    
    function getMinhIndex(arr,val){
        for(var i in arr){
            if(arr[i]==val){
                return i;
            }                
        }    
    }
    
    //检测是否需要滚动加载数据块的条件
    function checkScrollSlide(){
        var oParent = document.getElementById("main");
        var oBoxs = getByClass(oParent,'box');    
        var lastBoxH = oBoxs[oBoxs.length-1].offsetTop + Math.floor(oBoxs[oBoxs.length-1].offsetHeight/2);
        var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;
        console.log(scrollTop);
        var height = document.body.clientHeight || document.documentElement.clientHeight;
        return(lastBoxH < scrollTop+height) ? true:false;
    }
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/wanliyuan/p/3875601.html
Copyright © 2011-2022 走看看