js实现网页瀑布流布局

效果图:

html代码实现网页布局:

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7     <title>waterfall</title>
  8     <link rel="stylesheet" href="css/main.css">
  9     <script src="js/main.js"></script>
 10 </head>
 11 <body>
 12 <div id="main">
 13     <div class="box">
 14         <div class="pic">
 15             <img src="images/img_1.jpg" alt="...">
 16         </div>
 17     </div>
 18     <div class="box">
 19         <div class="pic">
 20             <img src="images/img_2.jpg" alt="...">
 21         </div>
 22     </div>
 23     <div class="box">
 24         <div class="pic">
 25             <img src="images/img_3.jpg" alt="...">
 26         </div>
 27     </div>
 28     <div class="box">
 29         <div class="pic">
 30             <img src="images/img_4.jpg" alt="...">
 31         </div>
 32     </div>
 33     <div class="box">
 34         <div class="pic">
 35             <img src="images/img_5.jpg" alt="...">
 36         </div>
 37     </div>
 38     <div class="box">
 39         <div class="pic">
 40             <img src="images/img_6.jpg" alt="...">
 41         </div>
 42     </div>
 43     <div class="box">
 44         <div class="pic">
 45             <img src="images/img_7.jpg" alt="...">
 46         </div>
 47     </div>
 48     <div class="box">
 49         <div class="pic">
 50             <img src="images/img_8.jpg" alt="...">
 51         </div>
 52     </div>
 53     <div class="box">
 54         <div class="pic">
 55             <img src="images/img_9.jpg" alt="...">
 56         </div>
 57     </div>
 58     <div class="box">
 59         <div class="pic">
 60             <img src="images/img_10.jpg" alt="...">
 61         </div>
 62     </div>
 63     <div class="box">
 64         <div class="pic">
 65             <img src="images/img_11.jpg" alt="...">
 66         </div>
 67     </div>
 68     <div class="box">
 69         <div class="pic">
 70             <img src="images/img_12.jpg" alt="...">
 71         </div>
 72     </div>
 73     <div class="box">
 74         <div class="pic">
 75             <img src="images/img_13.jpg" alt="...">
 76         </div>
 77     </div>
 78     <div class="box">
 79         <div class="pic">
 80             <img src="images/img_14.jpg" alt="...">
 81         </div>
 82     </div>
 83     <div class="box">
 84         <div class="pic">
 85             <img src="images/img_15.jpg" alt="...">
 86         </div>
 87     </div>
 88     <div class="box">
 89         <div class="pic">
 90             <img src="images/img_16.jpg" alt="...">
 91         </div>
 92     </div>
 93     <div class="box">
 94         <div class="pic">
 95             <img src="images/img_17.jpg" alt="...">
 96         </div>
 97     </div>
 98     <div class="box">
 99         <div class="pic">
100             <img src="images/img_18.jpg" alt="...">
101         </div>
102     </div>
103     <div class="box">
104         <div class="pic">
105             <img src="images/img_19.jpg" alt="...">
106         </div>
107     </div>
108     <div class="box">
109         <div class="pic">
110             <img src="images/img_20.jpg" alt="...">
111         </div>
112     </div>
113     <div class="box">
114         <div class="pic">
115             <img src="images/img_21.jpg" alt="...">
116         </div>
117     </div>
118     <div class="box">
119         <div class="pic">
120             <img src="images/img_22.jpg" alt="...">
121         </div>
122     </div>
123     <div class="box">
124         <div class="pic">
125             <img src="images/img_23.jpg" alt="...">
126         </div>
127     </div>
128     <div class="box">
129         <div class="pic">
130             <img src="images/img_24.jpg" alt="...">
131         </div>
132     </div>
133     <div class="box">
134         <div class="pic">
135             <img src="images/img_25.jpg" alt="...">
136         </div>
137     </div>
138     <div class="box">
139         <div class="pic">
140             <img src="images/img_26.jpg" alt="...">
141         </div>
142     </div>
143     <div class="box">
144         <div class="pic">
145             <img src="images/img_27.jpg" alt="...">
146         </div>
147     </div>
148     <div class="box">
149         <div class="pic">
150             <img src="images/img_28.jpg" alt="...">
151         </div>
152     </div>
153     <div class="box">
154         <div class="pic">
155             <img src="images/img_29.jpg" alt="...">
156         </div>
157     </div>
158     <div class="box">
159         <div class="pic">
160             <img src="images/img_30.jpg" alt="...">
161         </div>
162     </div>
163 </div> 
164     
165 </body>
166 </html>

css控制网页样式:

* {
    margin: 0;
    padding: 0;
}

.main {
     
}

.box {
    float:left;
    padding: 7px;
}

.pic img{
    width:300px;
    height: auto;
    border-radius: 5px;
}

其效果体验为:

1、当你滚动滚动条时(既鼠标下拉),网页图片会随着你的下拉不断的呈现出来源源不断(不是很多图片,是通过js让其以json的格式传递数据,然后然这些图片数据不断重复出现)。

2、图片等宽不等高,参差不齐,很有艺术感(文艺旅游相册网站),你懂的。

js实现瀑布流效果:

window.onload = function(){
    waterfall("main","box");
    var dataInt = {'data':[{"src":"img_1.jpg"},{"src":"img_2.jpg"},{"src":"img_3.jpg"},{"src":"img_4.jpg"},{"src":"img_5.jpg"},{"src":"img_6.jpg"},{"src":"img_7.jpg"},{"src":"img_8.jpg"},{"src":"img_9.jpg"},{"src":"img_10.jpg"},{"src":"img_11.jpg"},{"src":"img_12.jpg"},{"src":"img_13.jpg"},{"src":"img_14.jpg"},{"src":"img_15.jpg"},{"src":"img_16.jpg"},{"src":"img_17.jpg"},{"src":"img_18.jpg"},{"src":"img_19.jpg"},{"src":"img_20.jpg"},{"src":"img_21.jpg"},{"src":"img_1.jpg"},{"src":"img_22.jpg"},{"src":"img_24.jpg"},{"src":"img_25.jpg"},{"src":"img_26.jpg"},{"src":"img_27.jpg"},{"src":"img_28.jpg"},{"src":"img_29.jpg"},{"src":"img_30.jpg"}]}
    window.onscroll=function(){
        if(checkScrollSlide){
            var oParent = document.getElementById('main');    
            for(var i=0;i<dataInt.data.length;i++){
                var oBox = document.createElement('div');
                oBox.className='box';
                oParent.appendChild(oBox);
                var oPic = document.createElement('div');
                oPic.className='pic';
                oBox.appendChild(oPic);
                var oImg = document.createElement('img');
                oImg.src="images/"+dataInt.data[i].src;
                oPic.appendChild(oImg);
            }
            waterfall("main","box");
        }
    }
}

function waterfall(parent, box){
    var oParent = document.getElementById(parent);
    var oBoxs = getByClass(oParent,box);
    var oBoxw = oBoxs[0].offsetWidth;
    var cols = Math.floor(document.documentElement.clientWidth/oBoxw);
    oParent.style.cssText = ""+oBoxw*cols+"px;margin: 0 auto";
    var hArr = [];
    for(var i = 0; i<oBoxs.length;i++){
        if(i<cols){
            hArr.push(oBoxs[i].offsetHeight);
        }else{
            var minH = Math.min.apply(null, hArr);
            var index = getMinhIndex(hArr,minH);
            oBoxs[i].style.position="absolute";
            oBoxs[i].style.top=minH+"px";
            oBoxs[i].style.left=oBoxs[index].offsetLeft+'px';
            hArr[index] += oBoxs[i].offsetHeight;
        }
        
    }
}

function getByClass(parent, clsName){
    var boxArr = new Array(),
        oElements = parent.getElementsByTagName('*');
    for(var i=0; i<oElements.length;i++){
        if(oElements[i].className==clsName)
            boxArr.push(oElements[i]);
    }
    return boxArr;
}

function getMinhIndex(arr, val){
    for(var i in arr){
        if(arr[i]==val){
            return i;
        }
    }
}

function checkScrollSlide (){
    var oParent = document.getElementById(parent);
    var oBoxs = getByClass(oParent,box);
    var lastBoxH = oBoxs[oBox.length-1].offsetTop;
    var scrollTop = document.body.scrollTop||document.documentElement.scrollTop;
    var height = document.body.clientHeight||document.documentElement.clientHeight;
    return (lastBoxH<scrollTop+height)?true:false;
}
异乡小龟
原文地址:https://www.cnblogs.com/scale/p/6138089.html