瀑布流三部曲之jquery

jquery简化了javascript实现,html 和css部分代码与http://blog.csdn.net/qq_14886653/article/details/52613455
javascript实现瀑布流相同,所以不再给出。下面给出js代码:

$( window ).on( "load", function(){
    // 调用waterfall函数
    waterfall();
    var dataInt={'data':[{'src':'1.jpg'},{'src':'2.jpg'},{'src':'3.jpg'},{'src':'4.jpg'}]};
    window.onscroll=function(){
        // 拖动滚动条时
        if(checkscrollside()){
            $.each(dataInt.data, function(index, item){//动态加载数据,通过each方法遍历dataInt对象

                var $oPin = $('<div>').addClass('pin').appendTo($("#main"));
                var $oBox = $('<div>').addClass('box').appendTo($oPin);
                $('<img>').attr('src', 'images/'+$(item).attr('src')).appendTo($oBox);
            });
            waterfall();
        }
    }
});
function waterfall(){
    // 计算及定位数据块显示分散效果
    var boxes=$(".pin");
    var parent=$("#main");
    var boxesW=boxes.eq(0).outerWidth();//获取盒子外宽度,包括margin
    var windowW=$(window).width();//获取可视窗口宽度
    var cols=Math.floor(windowW/boxesW);//计算列数
    parent.css({
        "width":cols*boxesW+"px",
        "margin":"0 auto"
    });//居中

    var boxH=[];
    boxes.each(function(index,item){
        if(index<cols){
            boxH[index]=boxes.eq(index).outerHeight();
        }else{
            var minH=Math.min.apply(null,boxH);
            var minIndex=$.inArray(minH,boxH);//inArray函数返回某值在数组中的索引
            $(item).css({
                "position":"absolute",
                "top":minH+"px",
                "left":minIndex*boxesW+"px",
            });//定位元素
            boxH[minIndex]+=boxes.eq(index).outerHeight();//增加高度
        }
    })
}


function checkscrollside(){
    // 检测是否具备了加载数据块的条件
    var parent=$("#main");
    var boxes=$(".pin");
    var lastH=boxes.last().offset().top+Math.floor(boxes.last().outerHeight()/2);
    var scrollH=$(window).scrollTop()+$(window).height();
    return (lastH<scrollH)?true:false;
}

上述代码,有详细注释,不在细说实现。
最后附上三个瀑布流的项目文件地址:
https://github.com/wd4219/waterfall.git

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值