美文网首页full stack
Jquery 瀑布流(滚动加载)

Jquery 瀑布流(滚动加载)

作者: 最后只剩躯壳 | 来源:发表于2017-08-15 19:04 被阅读0次

源码下载地址

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>

相关文章

  • Jquery 瀑布流(滚动加载)

    源码下载地址 实现思路 通过容器宽度 和每列的宽度 可以计算出列数。 数组来保存每一列的高度,当页面加载新的盒子时...

  • 基于 jquery.nicescroll 实现瀑布流

    起因 PC端中大量使用 jquery.nicescroll 滚动条,现需实现列表瀑布流加载 实现过程 1、查看 A...

  • jQuery瀑布流插件masonry使用教程

    瀑布流特别适合多图片布局加载,效果很理想。 masonry是基于jquery的瀑布流插件,简单实用,本文就以滑动无...

  • 瀑布流div版

    瀑布流 瀑布流是一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块...

  • vue上拉加载List 列表

    介绍 Vant框架瀑布流滚动加载,用于展示长列表,当列表即将滚动到底部时,会触发事件并加载更多列表项。 在main...

  • 花瓣网瀑布流(滚动加载)采集思路详解

    瀑布流,又称瀑布流式布局。是比较流行的一种网站页面布局。视觉表现为,随着页面滚动条向下滚动,这种布局还会不断加载数...

  • 瀑布流_懒加载_ajax结合使用

    整体的布局是瀑布流效果,然后滚动到底部进行懒加载。大体的实现思路: 获取数据 将数据变为DOM,然后通过瀑布流(绝...

  • 瀑布流

    瀑布流jQuery瀑布流插件 Masonry:http://www.jq22.com/jquery-info362...

  • UICollectionView的使用

    瀑布流 横向滚动

  • 滚动加载的瀑布流效果

    需要jq的支持哦 也可以自己写原生js

网友评论

    本文标题:Jquery 瀑布流(滚动加载)

    本文链接:https://www.haomeiwen.com/subject/vcvvrxtx.html