瀑布流

demo
思路:
我手里有一堆圖片,想要按一定的規(guī)則去擺放他們,嗯,瀑布流先設(shè)置圖片寬度相等,因?yàn)楦鷶[放規(guī)則有關(guān)的,規(guī)則就是在父容器里啊,擺成n列,這個(gè)n,就是父容器的寬度除以圖片的絕對寬度得到的那個(gè)整數(shù)了。
確定擺幾列了,就開始擺放了。
當(dāng)?shù)谝粋€(gè)圖片開始加載了,把它放第一列第一的位置,第二個(gè)圖片加載了,放第二列,,,以此類推,直到第n列擺好了。
這時(shí)候,第n+1張圖加載了,放第幾列的下面?規(guī)則是放到現(xiàn)在列的高度最低的那列,這規(guī)則一直持續(xù)到最后,所以,之后每個(gè)圖片加載了,放在哪里,都要判斷下,此時(shí)的哪列的高度最低,放好圖片后,這個(gè)列的高度就加上這圖片的絕對高度。這就是邏輯了。怎么用代碼操作了?

  • 圖片放的時(shí)候,位置就是要絕對定位的,top值就是那個(gè)最低列的高度,就是之前加到這個(gè)列的圖片的高度之和。left值就是圖片的寬度乘以,它的列的序數(shù)減一的值。
  • 需要一個(gè)數(shù)組,數(shù)組的長度代表有多少列,數(shù)組的里面的位的值代表對應(yīng)列的高度。比較出哪一列的高度最低,就是要遍歷數(shù)組,比較得出,最后,再把高度更新一下。每當(dāng)一張圖片加載了,就比較一次,放一次圖片,再更新下高度。
    代碼:
<!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](http://upload-images.jianshu.io/upload_images/6723749-0cd8d952d71e563d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*70](http://upload-images.jianshu.io/upload_images/6723749-4891219bbc106de9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*150](http://upload-images.jianshu.io/upload_images/6723749-76f4a5748f7dd248?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*250](http://upload-images.jianshu.io/upload_images/6723749-24b70fb4c3772685?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*80](http://upload-images.jianshu.io/upload_images/6723749-d96d7e4309d2fed6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*90](http://upload-images.jianshu.io/upload_images/6723749-d5986d3a08d76b08?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*120](http://upload-images.jianshu.io/upload_images/6723749-6501439a2d692dec?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*210](http://upload-images.jianshu.io/upload_images/6723749-c965ded8bebfc3bc?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*230](http://upload-images.jianshu.io/upload_images/6723749-a6da922bbbd0f18c?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*100](http://upload-images.jianshu.io/upload_images/6723749-0cd8d952d71e563d?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*70](http://upload-images.jianshu.io/upload_images/6723749-4891219bbc106de9?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*150](http://upload-images.jianshu.io/upload_images/6723749-76f4a5748f7dd248?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*250](http://upload-images.jianshu.io/upload_images/6723749-24b70fb4c3772685?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*80](http://upload-images.jianshu.io/upload_images/6723749-d96d7e4309d2fed6?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*90](http://upload-images.jianshu.io/upload_images/6723749-d5986d3a08d76b08?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*120](http://upload-images.jianshu.io/upload_images/6723749-6501439a2d692dec?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*210](http://upload-images.jianshu.io/upload_images/6723749-c965ded8bebfc3bc?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
        ![300*230](http://upload-images.jianshu.io/upload_images/6723749-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>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容