Jquery 瀑布流(滚动加载)

源码下载地址

wf2.png

实现思路

  1. 通过容器宽度 和每列的宽度 可以计算出列数。

  2. 数组来保存每一列的高度,当页面加载新的盒子时,比较每一列的高度,在最小高度的列上动态添加盒子并设置相关属性(绝对定位)

  3. 当鼠标往下滚动到最后一张图片位置时,动态获取数据加载到瀑布流容器中

js部分

$(function(){
        var wfData=null;
        function init(){
            waterfall.initwf();
            waterfall.wfReload();
        }
        //滚动到最后一张图片时动态加载盒子
        $(window).on('scroll',function(){
            if(waterfall.isLoad()){
                waterfall.dynamicAddBox(8);
                waterfall.wfReload();
            }
        });
        //瀑布流
        var waterfall={
            columnCount:Math.floor($('#waterFall').width() / $("#waterFall .box").eq(0).width()),
            boxHeightArr:[],//每列高度集合
            wfReload:function(){
                //重新加载
                console.log('当前盒子个数='+$("#waterFall .box").length);
                waterfall.wfLoad($("#waterFall .box"),waterfall.columnCount);
            },
            //动态添加盒子
            dynamicAddBox:function(length){
                var tempList=waterfall.getRandomList(length,wfData.wfList);
                $.each(tempList,function(index,item){
                    $('<div class="box">'+
                            '<div class="pic">'+
                            '![]('+item.img+')'+
                            '<div class="evaluate">'+
                            '<p class="customer">'+item.user+'</p>'+
                            '<p class="desc">'+item.desc+'</p>'+
                            '</div>'+
                            '</div>'+
                            '</div>').appendTo($('#waterFall'));
                });
            },
            //动态定位
            wfLoad:function(boxList,columnCount){
                boxList.each(function(index, item) {
                    if (index < columnCount) {
                        //首行每列高度直接加入数组
                        waterfall.boxHeightArr[index] = boxList.eq(index).height();
                    } else {
                        //数组boxHeightArr中的最小值
                        var minHeight = Math.min.apply(null, waterfall.boxHeightArr);
                        var minHeightIndex = $.inArray(minHeight, waterfall.boxHeightArr);
                        $(item).css({
                            'position': 'absolute',
                            'top': minHeight+10,
                            'left': boxList.eq(minHeightIndex).position().left
                        });
                        //数组 更新添加了box后的列高 元素原来高度+新增元素高度
                        waterfall.boxHeightArr[minHeightIndex] += boxList.eq(index).height()+10;
                    }
                });
            },
            initwf:function(){
                $.ajax({
                    url: "../json/waterfall.json",
                    type: "GET",
                    dataType: "json",
                    charset:"utf-8",
                    async:false,
                    success: function(data) {
                        wfData=data;
                    }
                });
            },
            //随机选取指定个数 不同的box
            getRandomList:function(length,originaArr){
                var returnArr=[];
                var indexArr=[];
                var temp=null;
                while(indexArr.length<length){
                    temp=Math.floor(Math.random()*originaArr.length);
                    if($.inArray(temp, indexArr)<0){
                        indexArr.push(temp);
                        returnArr.push(originaArr[temp]);
                    }
                }
                return returnArr;
            },
            //是否加载盒子
            isLoad:function(){
                var lastBox=$("#waterFall .box").last();
                var flagHeight=lastBox.offset().top+Math.floor(lastBox.outerHeight()/2);
                var scrollTop=$(window).scrollTop();
                var documentH=$(window).height();
                return scrollTop+documentH>flagHeight;
            }
        }
        //初始化
        init();
    });

css部分

.water-fall {width: 1000px;margin: 20px auto 0;position: relative;height: 1170px;}
.water-fall .box {padding: 10px 0 0 10px;float: left;}
.water-fall .box .pic {padding: 10px;border: 1px solid #ccc;border-radius: 5px;box-shadow: 0 0 5px #ccc;width: 218px;position: relative;}
.water-fall .box .pic img {width: 218px;height:auto;}
.water-fall .box .pic .evaluate {position: absolute;bottom: 13px;width: 218px;background-color: rgba(13, 135, 84, 0.5);}
.water-fall .box .pic .evaluate .customer {font-size: 14px;color: #fff;margin-left: 10px;}
.water-fall .box .pic .evaluate .desc {font-size: 12px;color: #fff;margin-left: 10px;line-height: 20px;}

html 部分

<section id="waterFall" class="water-fall  clearfix">
    <div class="box">
        <div class="pic">
            ![](../image/wf1.jpg)
            <div class="evaluate">
                <p class="customer">胡歌</p>
                <p class="desc">生命注定要经历一次次磨难,才能塑造出与众不同,所有的经历都是获得,所有的获得都是上苍给予的恩宠。</p>
            </div>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            ![](../image/wf2.jpg)
            <div class="evaluate">
                <p class="customer">胡歌</p>
                <p class="desc">你若太害怕,闭上眼就好。</p>
            </div>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            ![](../image/wf3.jpg)
            <div class="evaluate">
                <p class="customer">胡歌</p>
                <p class="desc">如果皮囊难以修复,那就用思想去填满它吧!</p>
            </div>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            ![](../image/wf4.jpg)
            <div class="evaluate">
                <p class="customer">胡歌</p>
                <p class="desc">不知道是哪里走错,路的尽头没有人等我。</p>
            </div>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            ![](../image/wf5.jpg)
            <div class="evaluate">
                <p class="customer">胡歌</p>
                <p class="desc">当我在黑暗中艰难摸索,试图拾起些碎片的时候,却发现这个过程远没有想像中那么简单。</p>
            </div>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            ![](../image/wf6.jpg)
            <div class="evaluate">
                <p class="customer">胡歌</p>
                <p class="desc">我们,结成伴趟过天真。</p>
            </div>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            ![](../image/wf7.jpg)
            <div class="evaluate">
                <p class="customer"><strong>胡 歌</strong></p>
                <p class="desc">在拥有的时候懂得珍惜,就不会害怕失去;若失去了才知道珍惜,就算不上真正拥有。</p>
            </div>
        </div>
    </div>
    <div class="box">
        <div class="pic">
            ![](../image/wf8.jpg)
            <div class="evaluate">
                <p class="customer">胡歌</p>
                <p class="desc">忍了多久,错过青春。却憎恨,别人奋不顾身。</p>
            </div>
        </div>
    </div>
</section>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335