文字瀑布流的简单实现

大致样式如下

原理:

  1. 将父盒子设定宽高,相对定位,子盒子定宽,绝对定位
  2. 根据父盒子和多个等宽不等高的子盒子的宽度计算一共有多少列
  3. 将每一列目前的高度存到数组中,插入下一个元素时比较当前数组哪一列更空,计算top和left值,插入后更新高度数组
function waterfall() {
        var pos = [],
            $items = $('.waterfall-item'),
            fontSize = getComputedStyle(window.document.documentElement)['font-size'].split('px')[0],
            _box_width = $('.liked-content-wrap').width()/fontSize,
            _owidth = $items.eq(0).width()/fontSize + .2,
            _num = Math.floor(_box_width/_owidth);
        //确定一行有多少列
        var i = 0;
        for (; i < _num; i++) {
            pos.push([i*_owidth,0]);
        }
        //给每个元素设定top和left 放到当前比较少的那一列
        $items.each(function() {
            var _this = $(this),
                _temp = 0,
                _height = _this.height()/fontSize + .23;

            for (var j = 0; j < _num; j++) {
                if(pos[j][1] < pos[_temp][1]){
                    //暂存top值最小那列的index
                    _temp = j;
                }
            }
            this.style.cssText = 'left:'+(pos[_temp][0] + .20)+'rem; top:'+pos[_temp][1]+'rem;';
            //插入后,更新下该列的top值
            pos[_temp][1] = pos[_temp][1] + _height;
        });
    }
复制代码

注:

  1. 由于是在手机端用到的,计算的时候会将px转为rem

转载于:https://juejin.im/post/5c6505c7518825627b145299

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值