最近有空简单学习了下瀑布流,写完后想和大家一起分享下,但我知道我的代码有很多缺陷不足,希望多多包涵。(纯属兴趣非专业学习人士)
众所周知,瀑布流大概分为2种,一种是浮动式的瀑布流,一种是定位式的瀑布流,后者要稍微难于前者,但思维上大同小异。话不多说先上效果图。
1.首先浮动式的瀑布流,这个较简单,需要注意的是对追加图片列的UL的高度的比较,下面为代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>浮动瀑布流</title>
<style type="text/css">
* {padding: 0px;margin: 0px;}
#box {width: 1000px;margin:50px auto;background:black;}
#box ul {float: left;width: 230px;margin: 10px;list-style-type:none;}
#box ul li img {width: 230px;}
</style>
</head>
<body>
<div id="box">
<ul></ul>
<ul></ul>
<ul></ul>
<ul></ul>
</div>
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
function checkHeight(OUL){
var height=Infinity;
var Index=0;
for (var a = 0; a < OUL.length; a++) {
var now_height=OUL[a].offsetHeight;
if (now_height<height) {
height=now_height;
Index=a;
};
};
return Index;
}
function CreateIMage(){
var Obx=document.getElementById('box')
var OUL=Obx.getElementsByTagName('ul');
for (var i = 2; i < 13; i++) {
var IMG=new Image();
IMG.src="images/"+i+".jpg";
var Oli=document.createElement('li');
Oli.append(IMG);
var min_index = checkHeight(OUL);
OUL[min_index].append(Oli);
};};
$(function(){
CreateIMage();
window.onscroll = function(){
var ST = document.documentElement.scrollTop || document.body.scrollTop;
var vH = document.documentElement.clientHeight;
if (ST+vH>document.body.scrollHeight*0.8) {
CreateIMage();
};
}
});
</script>
</body>
</html>
2。定位式的瀑布流,这个和浮动式的差不多,需要注意的是对追加div的定位,而定位的重点是div的top和left的获取,下面为代码:
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <meta charset="UTF-8">
5 <title>定位瀑布流</title>
6 <style type="text/css">
7 * {padding: 0px;margin: 0px;}
8 #box {margin: 50px auto;position: relative;}
9 </style>
10 <script type="text/javascript" src="js/jquery.js"></script>
11
12 </head>
13 <body>
14 <div id="box">
15
16 </div>
17
18 <script type="text/javascript">
19 function getColor(){
20 var colorValue="0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f";
21 var colorArray=colorValue.split(",");
22 var _color="#";
23 for(var i=0;i<6;i++){
24
25 _color+=colorArray[Math.floor(Math.random()*16)]
26
27 }
28 return _color;
29 }
30
31
32 function checkHeight(obj){
33 var height=Infinity;
34 var index=0;
35 for (var a = 0; a < obj.length; a++) {
36 var now_height=obj[a];
37
38 if (now_height<height) {
39 height=now_height;
40 index=a;
41 };
42 };
43
44 return(index);
45
46 };
47
48
49 $(function(){
50 var Obox=document.getElementById('box');
51 var VW=$(window).width();
52 var Default_width=240;
53 var div_num=Math.floor(VW/Default_width)-1;
54 //设置box的宽度使其居中
55 $("#box").css({"width":Default_width*div_num});
56 var arrHeight=[0,0,0,0];
57 CreateDiv();
58
59 function CreateDiv(){
60
61 //初始化一个高度数组
62
63 for (var i = 2; i < 13; i++) {
64 var oImg=new Image();
65 oImg.src="images/"+i+".jpg";
66 oImg.style.width=230+"px";
67 var Odiv=document.createElement("div");
68 // Odiv.style.backgroundColor=getColor();
69 // Odiv.style.width=230+"px";
70 // var t=Math.ceil(Math.random()*150+150);
71 // Odiv.style.height=t+"px";
72 Odiv.style.position="absolute";
73 Odiv.append(oImg);
74
75 var min_index=checkHeight(arrHeight);
76 Odiv.style.top=arrHeight[min_index]+"px";
77 Odiv.style.left=min_index*Default_width+5+"px";
78 Obox.append(Odiv);
79
80 arrHeight[min_index]+=(Odiv.offsetHeight+5);}
81 };
82
83 window.onscroll=function(){
84 var ST=document.documentElement.scrollTop || document.body.scrollTop;
85 var VH=$(window).height();
86 if (ST+VH>(document.body.scrollHeight)*0.8){
87
88 CreateDiv();
89 };
90
91 }
92 });
93
94 </script>
95 </body>
96 </html>