如何实现瀑布流布局

如何实现瀑布流布局?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

创新互联专业为企业提供梓潼网站建设、梓潼做网站、梓潼网站设计、梓潼网站制作等企业网站建设、网页设计与制作、梓潼企业网站模板建站服务,10多年梓潼做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

index.html





waterfall layout
 



  • wf.css

@CHARSET "UTF-8";
*{margin:0;padding:0}
#main{
    position: relative;
    margin: 10px auto 0 auto;
}
.box{
    float:left;
    padding: 0 0 15px 15px; 
}
.pic{
    border: 1px solid #ccc;
    padding: 10px;
}
.box img{
    width: 200px;
    height: auto;
}
  • wf.js

window.onload = function(){
    waterfall();
    //要加载的数据,暂时写一个固定数据
    var dataInt = {"data":[{"src":'3.jpg'},{"src":'13.jpg'},{"src":'23.jpg'},{"src":'1.jpg'}]};
    //一个判断拖动滚动条后是否加载新内容的方法
    window.onscroll = function(){
        if(checkScrollSlide()){
            //将数据块渲染到当前页的尾部
            for(var i = 0; i < dataInt.data.length;i++){
                var parent = document.getElementById('main');
                var newBox = document.createElement('p');
                newBox.className = 'box';
                parent.appendChild(newBox);
                var newPic = document.createElement('p');
                newPic.className = 'pic';
                newBox.appendChild(newPic);
                var newImg = document.createElement('img');
                newImg.src = "./imgs/" + dataInt.data[i].src;
                newPic.appendChild(newImg);
                waterfall();
            }
        }
    }
}
function waterfall(){
    var parent = document.getElementById("main");
    //写一个方法根据类名box,找到所有节点
    var boxArr = getByClass(parent,'box');
    //console.log(boxArr.length);//26,检验是否获取到
    var bodyWidth = document.body.clientWidth;
    //document.body.clientWidth  窗口实时显示时的body的宽度
    var colWidth = boxArr[0].offsetWidth;//box p的宽度
    var cols = Math.floor(bodyWidth / colWidth);
    //给main p一个宽度,从而让显示内容不会随着浮动,改变布局
    var mainWidth = colWidth * cols;
    parent.style.cssText = 'width:' + mainWidth + 'px;';
    var colsHeight = [];//放列高度的数组
    for(var i = 0; i < boxArr.length;i++){
        var iBox = boxArr[i];
        if(i < cols){
            colsHeight.push(iBox.offsetHeight);
        }else{
            var rArr = searchMin(colsHeight);
            var index = rArr[0];
            var minH = rArr[1];
            var left = parseInt(index * colWidth);
            var top = minH;
            iBox.style.position = "absolute";
            iBox.style.left = left + 'px';
            iBox.style.top = top + 'px';
            colsHeight[index] += iBox.offsetHeight;
        }
    }
}

function getByClass(parent,clsName){
    //用通配符获得prent下的所有标签节点
    var allTags = document.getElementsByTagName("*");
    var arr = new Array();
    for(var i = 0; i < allTags.length;i++){
        if(allTags[i].className == clsName){
            arr.push(allTags[i]);
        }
    }
    return arr;
}
function searchMin(arr){
    var min = arr[0];
    var index = 0;
    for(var j = 0; j < arr.length; j++){
        if(arr[j] < min){
            min = arr[j];
            index = j;
        }
    }
    return [index,min];    
}
function checkScrollSlide(){
    var parent = document.getElementById('main');
    var boxArr = getByClass(parent,'box');
    var lastBox = boxArr[boxArr.length-1];
    var lbHeight = lastBox.offsetTop+Math.floor(lastBox.offsetHeight/2);
    console.log(lbHeight);
    var slideH = document.body.scrollTop || document.documentElement.scrollTop;
    console.log(slideH);
    var winH = document.body.clientHeight || document.documentElement.clientHeight;
    console.log(winH);
    var swHeight = slideH + winH;
    return (lbHeight < swHeight) ? true : false;
}

关于如何实现瀑布流布局问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。


名称栏目:如何实现瀑布流布局
分享URL:http://myzitong.com/article/jcdpog.html