[HTML教程] 瀑布流布局实现的代码

[复制链接]
查看1632 | 回复7 | 2020-8-18 14:06:57 | 显示全部楼层 |阅读模式
这篇文章给大家介绍的内容是关于瀑布流布局实现的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>waterfall layout</title>
<link type="text/css" href="./imgs/wf.css" rel="stylesheet"/> 
<script type="text/javascript" src="./imgs/wf.js"></script>
</head>
<body>
<div id="main">
    <div class="box">
        <div class="pic">
            <img src="imgs/0.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/1.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/2.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/3.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/4.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/5.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/6.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/7.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/8.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/9.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/10.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/11.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/12.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/13.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/14.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/15.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/16.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/17.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/18.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/19.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/20.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/21.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/22.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/23.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/24.jpg"/>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            <img src="imgs/25.jpg"/>
        </div>
    </div>
</div>
</body>
</html>
  • 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.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;
        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.className == clsName){
            arr.push(allTags);
        }
    }
    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;
}

相关文章推荐:

div标签:水平居中和垂直居中的实现(附代码)

css box-sizing属性(盒子模型)的用法介绍

以上就是瀑布流布局实现的代码的详细内容,更多请关注爱上源码网其它相关文章!

  • 微信
  • 分享
  • 相关标签:html css javascript
  • 本文原创发布爱上源码网,转载请注明出处,感谢您的尊重!
    • 上一篇:div标签:水平居中和垂直居中的实现(附代码)
    • 下一篇:html布局:html三列布局的实现代码

    相关文章

    相关视频

    • 奇妙的 CSS shapes(CSS图形)
    • IE、火狐、谷歌浏览器下兼容统一select样式
    • 神奇的 conic-gradient 圆锥渐变
    • 利用html实现一个三级菜单
    • 瀑布流布局实现的代码
    • HTML基础认知
    • HTML简介
    • HTML 简介
    • HTML 编辑器
    • HTML 编辑器
    本文有爱上源码下载完入驻作者发布,如果对您版权造成侵害,可以联系本站站长管理进行维权删除,本站收到维权24小时内进行处理,谢谢您关注23ym.cn! 本站分享大量程序员技术文章以及对编程开发的初级入门教程,包括图文讲解笔记和高清视频下载~
    回复

    使用道具 举报

    yslzaity | 2020-12-2 11:51:56 | 显示全部楼层
    支持悟空源码,越来越好
    回复

    使用道具 举报

    123457067 | 2022-2-8 12:19:59 | 显示全部楼层
    5kym.cn这个站资源太全了
    回复

    使用道具 举报

    嫣冉 | 2022-6-1 04:36:20 | 显示全部楼层
    有情怀的站啊,爱了
    回复

    使用道具 举报

    123456911 | 2022-6-1 13:04:11 | 显示全部楼层
    感谢悟空源码分享精品资源!
    回复

    使用道具 举报

    疑骨德秋忘 | 2022-6-2 13:23:48 | 显示全部楼层
    加油!悟空源码,继续努力!支持你!
    回复

    使用道具 举报

    春天到了 | 2022-6-3 14:51:09 | 显示全部楼层
    我是来白嫖悟空源码的积分的!!!!!
    回复

    使用道具 举报

    淡然一笑wwc | 2022-7-8 17:29:49 | 显示全部楼层
    厉害了,悟空源码资源多教程多!
    回复

    使用道具 举报

    南辕北辙395 | 2023-2-12 11:10:03 | 显示全部楼层
    这个站很好,资源多,教程全
    回复

    使用道具 举报

    路人52014 | 2023-10-26 13:22:12 | 显示全部楼层
    悟空源码资源不错。粉了
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则