js瀑布流

做一个基于jquery的瀑布流插件:

/**
 * Created by qi on 2019/12/6.
 * 本插件适用于IE9+
 * 基于jquery
 */
var layout = function(param){
    var el = param.el;//绑定元素
    var column = param.column||3;//列数,默认3列
    var padding = param.padding/2||10;//设置列距,默认是20px

    var item = $(el).find('.item');//item个数
    var width = Math.round(100/column*100)/100;//根据列数计算宽度
    var arr = [];//存放高度的数组
    for(var i =0;i<column;i++){arr[i] = 0;}//初始数组每一项都为0
    //var arr = new Array(column).fill(0);//ie不支持fill方法

    $(el).css({'position':'relative','margin-left': -padding+'px','margin-right':-padding+'px'});//初始化容器
    item.css({'position':'absolute','box-sizing':'border-box','padding':padding+'px'});//初始项目
    item.css({'width':width+'%'});//设置每个项的宽度用%设置,取俩位小数
    for (var i=0;i<item.length;i++){
        var minTop = Math.min.apply(null,arr);//获取高度最小的行
        var which = arr.indexOf(minTop);//高度最小行是第一列
        var thisLeft = which*width+'%';
        item.eq(i).css({'top':minTop+'px','left':thisLeft});//设置第i个item的top和left
        arr[which] += item.eq(i).outerHeight(true);//item显示在第几行给第几行加上这个item的高度
    }
    var maxTop = Math.max.apply(null,arr);//获取高度最大的行
    $(el).css('height',maxTop+'px');
};

应用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js实现瀑布流</title>
    <style>
        .box{width: 1200px;border: 1px solid #333;margin: 0 auto;}
        .item img{width: 100%; border: 1px solid #333;}
    </style>
</head>
<body>
    <div class="box">
        <div class="wrap">
            <div class="item"><img src="images/1.jpg" alt=""></div>
            <div class="item"><img src="images/2.png" alt=""></div>
            <div class="item"><img src="images/3.png" alt=""></div>
            <div class="item"><img src="images/4.png" alt=""></div>
            <div class="item"><img src="images/5.png" alt=""></div>
            <div class="item"><img src="images/2.png" alt=""></div>
            <div class="item"><img src="images/1.jpg" alt=""></div>
            <div class="item"><img src="images/2.png" alt=""></div>
            <div class="item"><img src="images/3.png" alt=""></div>
            <div class="item"><img src="images/4.png" alt=""></div>
            <div class="item"><img src="images/3.png" alt=""></div>
            <div class="item"><img src="images/4.png" alt=""></div>
            <div class="item"><img src="images/5.png" alt=""></div>
            <div class="item"><img src="images/2.png" alt=""></div>
            <div class="item"><img src="images/1.jpg" alt=""></div>
            <div class="item"><img src="images/2.png" alt=""></div>
        </div>
    </div>
</body>
<script src="js/jquery.js"></script>
<script src="js/Waterfall.js"></script>
<script>
    $(function(){
        layout({
            el:'.wrap',
            column:4,
            padding:20
        });
    })
</script>
</html>

效果:

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值