瀑布流

作者: 流着万条永远的河 | 来源:发表于2017-10-21 16:12 被阅读0次

demo
思路:
我手里有一堆图片,想要按一定的规则去摆放他们,嗯,瀑布流先设置图片宽度相等,因为跟摆放规则有关的,规则就是在父容器里啊,摆成n列,这个n,就是父容器的宽度除以图片的绝对宽度得到的那个整数了。
确定摆几列了,就开始摆放了。
当第一个图片开始加载了,把它放第一列第一的位置,第二个图片加载了,放第二列,,,以此类推,直到第n列摆好了。
这时候,第n+1张图加载了,放第几列的下面?规则是放到现在列的高度最低的那列,这规则一直持续到最后,所以,之后每个图片加载了,放在哪里,都要判断下,此时的哪列的高度最低,放好图片后,这个列的高度就加上这图片的绝对高度。这就是逻辑了。怎么用代码操作了?

  • 图片放的时候,位置就是要绝对定位的,top值就是那个最低列的高度,就是之前加到这个列的图片的高度之和。left值就是图片的宽度乘以,它的列的序数减一的值。
  • 需要一个数组,数组的长度代表有多少列,数组的里面的位的值代表对应列的高度。比较出哪一列的高度最低,就是要遍历数组,比较得出,最后,再把高度更新一下。每当一张图片加载了,就比较一次,放一次图片,再更新下高度。
    代码:
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>瀑布流</title>
    <style>
        .waterfall {
            max-width: 600px;
            border: 1px solid;
        }
        
        img {
            position: absolute;
            width: 100px;
            margin: 10px;
            transition: all .4s;
        }
    </style>
</head>

<body>
    <script src="https://code.jquery.com/jquery-2.1.4.js"></script>
    <div class="waterfall">
        ![300*100](https://img.haomeiwen.com/i6723749/0cd8d952d71e563d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*70](https://img.haomeiwen.com/i6723749/4891219bbc106de9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*150](https://img.haomeiwen.com/i6723749/76f4a5748f7dd248?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*250](https://img.haomeiwen.com/i6723749/24b70fb4c3772685?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*80](https://img.haomeiwen.com/i6723749/d96d7e4309d2fed6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*90](https://img.haomeiwen.com/i6723749/d5986d3a08d76b08?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*120](https://img.haomeiwen.com/i6723749/6501439a2d692dec?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*210](https://img.haomeiwen.com/i6723749/c965ded8bebfc3bc?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*230](https://img.haomeiwen.com/i6723749/a6da922bbbd0f18c?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*100](https://img.haomeiwen.com/i6723749/0cd8d952d71e563d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*70](https://img.haomeiwen.com/i6723749/4891219bbc106de9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*150](https://img.haomeiwen.com/i6723749/76f4a5748f7dd248?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*250](https://img.haomeiwen.com/i6723749/24b70fb4c3772685?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*80](https://img.haomeiwen.com/i6723749/d96d7e4309d2fed6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*90](https://img.haomeiwen.com/i6723749/d5986d3a08d76b08?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*120](https://img.haomeiwen.com/i6723749/6501439a2d692dec?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*210](https://img.haomeiwen.com/i6723749/c965ded8bebfc3bc?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*230](https://img.haomeiwen.com/i6723749/a6da922bbbd0f18c?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


    </div>
    <script>
        var imgwid = $('.waterfall img').outerWidth(true)
        var count = Math.floor($('.waterfall').width() / imgwid)
        var heiarr = []
        for (var i = 0; i < count; i++) {
            heiarr[i] = 0
        }
        $('.waterfall img').on('load', function() {
            var minval = heiarr[0]
            var minindex = 0
            for (var i = 0; i < count; i++) {

                console.log(heiarr)
                if (heiarr[i] < minval) {

                    minval = heiarr[i]
                    minindex = i

                }
            }
            console.log(minval, minindex)
            console.log(minindex * imgwid)
            $(this).css({
                left: minindex * imgwid,
                top: minval
            })
            heiarr[minindex] += $(this).outerHeight(true)




        })
    </script>
</body>

</html>

相关文章

网友评论

      本文标题:瀑布流

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