网页瀑布流布局

网页瀑布流布局JS代码:

jQuery.waterfall.js:

(function ($) {
    $.fn.extend({
        //实现瀑布流
        "waterfall":function (options) {
            options=$.extend({
                "flowNum":4,     //列数
                "flowWidth":230,  //每列宽度
                "defRowNum":2,    //页面打开时默认显示的行数
                "imgArr":[]       //图片信息数组
            },options);
            var flowNum=options.flowNum;
            var flowWidth=options.flowWidth;
            var defRowNum=options.defRowNum;
            var imgArr=options.imgArr;
            //图片信息数组
            var imgIndex=0;    //图片数组当前索引
            var imgCount=imgArr.length;  //图片数组总数
            //缓存常用对象
            var $document=$(document);
            var $window=$(window);
            var $wrapDiv=this;

            //自动生成每一列
            var $flowDiv=$(createFlow());     //创建列
            $wrapDiv.html($flowDiv);          //将flowDiv放入父容器

            //自动撑大以显示滚动条
            $wrapDiv.css("min-height",$window.height());
            //页面打开时默认显示的内容
            autoFill();

            //滚动条事件
            $window.scroll(function(){
                if(isScrollBottom()){
                    shortFill(); //最短列填充1张图片
                    $wrapDiv.css("min-height",($wrapDiv.height()+20)+"px");//自动撑大滚动条
                }
            });
            //根据列数创建元素
            function createFlow(){
                var str = '<div class="water-flow" style="width: '+flowWidth+'px"></div>';
                return new Array(flowNum+1).join(str);
            }
            //创建图片元素
            function createImage(src){
                return '<div class="water-each"><img src="'+src+'" /></div>';
            }
            //自动填充
            function autoFill(){
                //遍历图片数组
                for(var i=0;i<defRowNum;i++){
                    rowFill();
                }
            }
            //填充一行
            function rowFill(){
                for(var i=0;i<flowNum;i++){
                    if(imgIndex < imgCount){
                        var $imgDiv = $(createImage(imgArr[imgIndex++]));
                        $flowDiv.eq(i).append($imgDiv);
                        $imgDiv.fadeIn(500); //以淡入效果显示
                    }
                }
            }
            //为最小高度的一列增加一张图片
            function shortFill(){
                if(imgIndex < imgCount){
                    var $imgDiv = $(createImage(imgArr[imgIndex++]));
                    getShortFlow().append($imgDiv);
                    $imgDiv.fadeIn(1000); //以淡入效果显示
                }
            }
            //获取最短的一列
            function getShortFlow(){
                var $flowMin = $flowDiv.eq(0);
                $flowDiv.each(function(){
                    if($(this).height() < $flowMin.height()){
                        $flowMin = $(this);
                    }
                });
                return $flowMin;
            }
            //判断滚动条是否滚动到底部
            function isScrollBottom(){
                return ($document.scrollTop()+250) >= ($document.height()-$window.height());
            }

        }
    });
})(jQuery);

HTML:

<!-- 准备一个空div -->
    <div class="water"></div>
</div>
<script src="./js/jquery.waterfall.js"></script>
<script>
    $(function () {
        var imgArr = createImageArr();
        $(".water").waterfall({"imgArr": imgArr});//调用插件并传参
    });

    //创建图片列表数组
    function createImageArr() {
        var imgArr = [];
        for (var i = 0; i < 100; i++) {
            imgArr[i] = "./waterfall/" + i + ".jpg";
        }
        return imgArr;
    }
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值