2020-03-02

js瀑布流特效

瀑布流预览

代码示例

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            *{
                margin: 0px;
                padding: 0px;
                box-sizing: border-box;
            }
            #box{
                position: relative;
            }
            .b_box{
                float: left;
                padding: 10px 0 0 10px;
            }
            .s_box{
                border: solid 1px #ccc;
                padding: 10px;
            }
            .b_box img{
                vertical-align: bottom;
                cursor: pointer;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <div class="b_box"><div class="s_box"><img src="img/1.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/2.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/3.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/4.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/5.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/6.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/7.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/8.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/9.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/10.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/11.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/12.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/13.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/14.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/15.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/16.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/17.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/18.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/19.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/20.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/21.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/22.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/23.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/24.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/26.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/25.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/27.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/28.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/29.jpg"/></div></div>
            <div class="b_box"><div class="s_box"><img src="img/30.jpg"/></div></div>
        </div>
        <script type="text/javascript"> 
            window.onload = function(){
                var box = document.getElementById("box");
                var b_boxs = document.getElementsByClassName("b_box");
                var s_boxs = document.getElementsByClassName("s_box");
                var imgs = document.getElementsByTagName("img");
                var img = s_boxs[0].getElementsByTagName("img")[0];
                //浏览器的宽度   document.body.offsetWidth
                var clientWidth =  document.body.offsetWidth;
                //图片的宽度     img.img.offsetWidth
                var imgWidth = img.offsetWidth;
                //图片的高度     img.img.offsetHeight
                var imgHeight = img.offsetHeight;
                //b_box的宽度
                var b_boxWidth = b_boxs[0].offsetWidth; 
                //b_box的高度
                var b_boxHeight = b_boxs[0].offsetHeight; 
                //获取每行图片的个数
                var num = parseInt(clientWidth/b_boxWidth);
                //设置盒子居中
                box.style.width = b_boxWidth*num + "px";
                box.style.margin = " 0 auto";
//              console.log(b_boxWidth);
//              console.log(b_boxHeight);
                console.log("列数:" + num);
                var b_boxHeight = [];
                for (var i = 0; i < b_boxs.length; i++) {
                    if(i<num){
                        b_boxHeight.push(b_boxs[i].offsetHeight);
                    }else{
                        var minHeight = getMinHeight(b_boxHeight);
                        var minHeightIndex = getMinHeightIndex(b_boxHeight,minHeight);
                        b_boxs[i].style.position = "absolute";
                        b_boxs[i].style.left = minHeightIndex*b_boxWidth + "px"
                        b_boxs[i].style.top = minHeight + "px"
                        b_boxHeight[minHeightIndex] += b_boxs[i].offsetHeight;
                    }
                }
                console.log(minHeight)
                console.log(minHeightIndex)
                console.log(b_boxHeight);
                for (var i = 0; i < imgs.length; i++) {
                    imgs[i].onmouseover = function (){
//                      this.parentNode.style.border = "solid 1px red"
                    }
                }
            }
                function getMinHeight(arr){
                    var min = arr[0];
                    for (var i = 0; i < arr.length; i++) {
                        if(min>arr[i]){
                            min = arr[i];
                        }
                    }
                    return min;
                }
                function getMinHeightIndex(arr,minHeight){
                    var index;
                    for (var i = 0; i < arr.length; i++) {
                        if(minHeight == arr[i]){
                            index = i;
                        }
                    }
                    return index;
                }
        </script>
    </body>
</html>

图片素材

1 2 3
1.jpg
2.jpg
3.jpg
4 5 6
:--: :--: :--:
4.jpg
5.jpg
6.jpg
7 8 9
:--: :--: :--:
7.jpg
8.jpg
9.jpg
10 11 12
:--: :--: :--:
10.jpg
11.jpg
12.jpg
13 14 15
:--: :--: :--:
13.jpg
14.jpg
15.jpg
16 17 18
:--: :--: :--:
16.jpg
17.jpg
18.jpg
19 20 21
:--: :--: :--:
19.jpg
20.jpg
21.jpg
22 23 24
:--: :--: :--:
22.jpg
23.jpg
24.jpg
25 26 27
:--: :--: :--:
25.jpg
26.jpg
27.jpg
28 29 30
:--: :--: :--:
28.jpg
29.jpg
30.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容