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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章