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

    之前写过,但是感觉没写过似的,看来有必要重新回想下当时的思路。

    <style type="text/css">
        *{margin:0; padding:0; box-sizing: border-box; -webkit-box-sizing: border-box; -moz-box-sizing: border-box;}
        img{max- 100%; height: auto;}
        #wrap{position: relative; 90%; margin:0 auto;}
        .box{25%; float:left; padding: 0 15px 15px 0;}
        .pic{padding:10px; border:1px solid #888;}
    </style>
    <div id="wrap">
        <div class="box">
            <div class="pic"><img src="images/0.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/1.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/15.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/2.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/10.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/18.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/11.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/12.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/13.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/14.jpg" alt=""/></div>
        </div>
    
        <div class="box">
            <div class="pic"><img src="images/16.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/17.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/18.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/19.jpg" alt=""/></div>
        </div>
        <div class="box">
            <div class="pic"><img src="images/20.jpg" alt=""/></div>
        </div>
    </div>
    <script type="text/javascript" src="http://libs.baidu.com/jquery/1.9.0/jquery.min.js"></script>
    <script>
        /*
        *  瀑布流 等宽不等高布局
        */
        var waterFall = function() {
            var $wrap = $("#wrap"),
                $list = $("#wrap>div"),
                w = $list.eq(0).outerWidth(), //获取第一个元素宽度也就是所有子元素的宽度
                cols = Math.round($("#wrap").width()/w); //计算每行有几列
            var hArr = []; //数组用来存储每列相加的高度
            var wrapH = 0; //定义最外层box高度
            $list.each(function(index, value) {
                var h = $list.eq(index).outerHeight(); //获取遍历的每个元素的高度
                var minH, minHIndex;
                if(index < cols) {   //循环所有子元素,如果索引小于每列数,那这些元素应该是在第一行.
                    hArr[index] = h;
                }else {
                    minH = Math.min.apply(null, hArr);  //计算hArr数组中最小高度Math.min.apply(null, Array)方法
                    minHIndex = $.inArray(minH, hArr);  //计算hArr数组中最小高度的索引值$.inArray()方法
                    $(value).css({
                        'position': 'absolute',
                        'top': minH + 'px',
                        'left': minHIndex*w + 'px'
                    })
                    hArr[minHIndex] += h; //将原最小高度加上 在下面新增的box高度
                }
                var height = minH + h;
                if(height > wrapH) {
                    wrapH = height;
                }
            })
            $("#wrap").height(wrapH);  //给最外层box设置高度
        }
    
        var checkScrollSide = function() {
            var $lastEle = $list.last(),
                lastEleTop = $lastEle.offset().top + $lastEle.height()/2;
            var scrollH = $(window).scrollTop();
            var windowH = $(document).height();
            return (lastEleTop < scrollH + windowH) ? true : false;
        }
    
        //页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包含图片等非文字文件),二是onload,表示页面包含图片等文件在内的所有元素加载完成。
        $(window).on("load", function() {  //第一次页面加载如果图片下载速度过慢,使得图片高度无法获取到,元素高度计算会错误,图片出现重叠问题,所以需要等到load事件
            waterFall();
            var dataList = {'data':[{'src':'15.jpg'},{'src':'1.jpg'},{'src':'18.jpg'},{'src':'10.jpg'}]};
            $(window).scroll(function() {
                if(checkScrollSide) {  //判断最后一个元素高度是否显示过半。
                    $.each(dataList.data, function(index, value) {
                        var $oEle = $("<div>").addClass("box").appendTo($("#wrap")),
                            $oPic = $("<div>").addClass("pic").appendTo($oEle),
                            $oImg = $('<img>').attr("src", "images/" + $(value).attr("src")).appendTo($oPic);
                    })
                    waterFall();
                }
            })
        })
    </script>
  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/wanbi/p/4204975.html
Copyright © 2011-2022 走看看