jQuery 实现瀑布流布局

就是一些我觉得用jq更加简单的方法用jq又写了一遍,和前面的文章思路什么的都差不多。有些jq封装好的函数更加好用。

代码:

 <!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
    <title>hhh</title>
            <style type="text/css">
        *{
            padding: 0;
            margin: 0;
        }
        #main{
            position: relative;
        }
        .pin{
            float: left;
            padding: 15px 0 0 15px;
        }
        .box{
            border-radius: 5px;
            box-shadow: 0 0 6px #ccc;
            border:1px solid #ccc;
            padding: 10px;

        }
        .box img{
            width: 162px;
            height:auto;
        }
    </style>

</head>
<body>


    <div id="main">
        <div class="pin">
            <div class="box">
                <img src="images/0.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/1.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/2.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/3.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/4.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/5.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/6.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/7.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/8.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/9.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/10.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/11.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/12.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/13.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/14.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/15.jpg">
            </div>
        </div>

        <div class="pin">
            <div class="box">
                <img src="images/16.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/17.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/18.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/19.jpg">
            </div>
        </div>

        <div class="pin">
            <div class="box">
                <img src="images/20.jpg">
            </div>
        </div>
        <div class="pin">
            <div class="box">
                <img src="images/21.jpg">
            </div>
        </div>
    </div>

    <script type="text/javascript" src="js/jquery.min.js"></script>
    <script type="text/javascript">
        var dataint = {'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'}]};

        $(function(){

            waterfall('pin');



            window.onscroll = function(){
                if (checkscroll('pin')) {
                    for (var i = 0; i < 3; i++) {
                    createdom('pin','box',i);
                    waterfall('pin');
                            }debugger;

                }
            }

        })
        function waterfall(obj){

            var apin = $('.'+obj);
            var width = apin[0].offsetWidth;
            var awidth = document.documentElement.clientWidth;
            var num = Math.floor(awidth/width);
            var arr = new Array(num);//创建一个数组用来存放每列的高度
            for( var i = 0;i < apin.length;i++){
                if (i < num) {
                    arr[i] = apin[i].offsetHeight;
                }
                else{
                    var minh = Math.min.apply(null,arr);//找出一列中最小高度
                    var index = minhindex(minh,arr);//最小高度的下标值
                    apin[i].style.position = 'absolute';
                    apin[i].style.top = arr[index] +'px';
                    apin[i].style.left = index*width + 'px';

                    arr[index] += apin[i].offsetHeight; 
                }


            }


        }

        function minhindex(obj,arr){
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] == obj) {
                    return i;
                }
            }
        }

        function createdom(parent,child,i){

                var oparent ="<div class='" +parent +"' ></div>";
                $('#main').append(oparent);
                var ochild = "<div class = '"+ child +"'></div>";
                $('.'+parent+':last').append(ochild);
                var oimg = '<img src="images/'+ dataint.data[i].src + '" />';
                $('.'+child+':last').append(oimg);
    }

        function checkscroll(obj){

            var aPin=$('.'+obj);
            var lastPinH=aPin[aPin.length-1].offsetTop+Math.floor(aPin[aPin.length-1].offsetHeight/2);//创建【触发添加块框函数waterfall()】的高度:最后一个块框的距离网页顶部+自身高的一半(实现未滚到底就开始加载)
            var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;//注意解决兼容性
            var documentH=document.documentElement.clientHeight;//页面高度
            return (lastPinH<scrollTop+documentH)?true:false;//到达指定高度后 返回true,触发waterfall()函数
        }
    </script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/weixin_42128001/article/details/81630923