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>
  • 相关阅读:
    css3实现轮播2
    css3实现轮播1
    读阮一峰ES6笔记4:字符串的新增方法
    读阮一峰ES6笔记3:字符串的扩展
    应用流策略与检查配置结果
    配置流策略
    配置流行为
    配置流分类
    "流量监管"和"流量整形"的区别
    802.1p 优先级与内部优先级的映射关系
  • 原文地址:https://www.cnblogs.com/wanbi/p/4204975.html
Copyright © 2011-2022 走看看