码迷,mamicode.com
首页 > 其他好文 > 详细

两种方式实现瀑布流

时间:2017-04-27 19:27:43      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:定位   宽度   end   off   代码   font   方式   har   最小   

一、浮动式瀑布流

实现要点:

1.设定列数,定下框架。

2.在ul中创建新节点li,在li中添加img节点,形成整体结构。

3.写最短列函数,每次创建的img保证在最小列下追加。

4.写滚动事件,在拖到最下方能自动加载

浮动式定位代码:

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<style type="text/css">
*{
margin: 0;
padding: 0;
}
p{
margin: 20px auto;
width: 330px;
font-size: 26px;
color: purple;
}
#box{
margin: 0 auto;
width:1000px;
}
#box ul{
/*ul浮动*/
float: left;
}
#box ul li{
list-style: none;
}
#box ul li img{
width: 180px;
padding: 10px;

}
</style>
<script type="text/javascript">
window.onload=function(){
//抓元素
var box=document.getElementById(‘box‘);
var uls=box.getElementsByTagName(‘ul‘);
var vh=document.documentElement.clientHeight;

//创建节点函数
crElement();
function crElement(){
for(var i=1; i<=25;i++){
var new_img=document.createElement(‘img‘);
var new_li=document.createElement(‘li‘);
new_img.src=‘images/‘+i+‘.jpg‘;
new_li.appendChild(new_img);
var index=shortest(uls);
uls[index].appendChild(new_li);
}
}

//最小ul函数
function shortest(uls){
var height=uls[0].offsetHeight;
var index=0;
for(var i=0;i<uls.length;i++){
var new_height=uls[i].offsetHeight;
if(new_height<height){
height=new_height;
index=i;
}
}
return index;
}

//滚动事件
window.onscroll=function(){
var st=document.documentElement.scrollTop || document.body.scrollTop;
if(st+vh>=document.body.scrollHeight){
crElement();
}
}
}
</script>

</head>

<body>
<p>~~~~浮动瀑布流~~~~</p>
<div id="box">

<!--五列-->
<ul></ul>
<ul></ul>
<ul></ul>
<ul></ul>
<ul></ul>
</div>

</body>
</html>

二、定位式瀑布流

实现要点:

1.根据定下的每个div块的宽度,浏览器宽度,计算可容纳div列数

2.创建新节点div,在div中使用appendChild添加img节点,形成整体结构。

3.初始化高度数组,写最短高度函数,每次创建的img保证在最短列下追加。

4.写滚动事件,拖到最下方能自动加载

定位式瀑布流代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>定位瀑布流</title>
<style type="text/css">
*{
margin: 0;
padding:0;
}
body{
background: cadetblue;
}
p{
margin: 20px auto;
width: 330px;
font-size: 26px;
color: purple;
}
#box{
margin: 0 auto;
position: relative;
}
#box div img{
width: 230px;
margin: 0px 8px;
}
</style>
<script type="text/javascript">
window.onload=function(){
//抓元素
var box=document.getElementById(‘box‘);
//获得浏览器宽高
var vh=document.documentElement.clientHeight;
var vw=document.documentElement.clientWidth;
//计算最多可容纳div数
var default_width=230+16;
var div_num=Math.floor(vw/default_width);
//获得空间设置居中
box.style.width=default_width*div_num+‘px‘;
// 初始化一个高度数组
var arr_height=[0,0,0,0,0];

crElement();
//循环创建元素
function crElement(){
for(var i=1;i<=25;i++){
var new_img=document.createElement(‘img‘);
var new_div=document.createElement(‘div‘);
new_img.src=‘images/‘+i+‘.jpg‘;
new_div.appendChild(new_img);
new_div.style.position=‘absolute‘;
var min_index=shortest(arr_height);
new_div.style.left=min_index*default_width+‘px‘;
new_div.style.top=arr_height[min_index]+‘px‘;
//
box.appendChild(new_div);
arr_height[min_index]+=new_div.offsetHeight+8;

}
}

//获得最小的列
function shortest(arr_height){
var height=arr_height[0];
var index=0;
for(var i=0;i<arr_height.length;i++){
if(arr_height[i]<height){
height=arr_height[i];
index=i;
}
}
return index;
}

//滚动加载
window.onscroll=function(){
//内容高度=滚动高度+浏览器高度
var st=document.documentElement.scrollTop;
if(vh+st>=document.body.scrollHeight){
crElement();
}
}

}
</script>
</head>
<body>
<p>~~~~定位瀑布流~~~~</p>
<div id="box">
</div>
</body>
</html>

两种方式实现瀑布流

标签:定位   宽度   end   off   代码   font   方式   har   最小   

原文地址:http://www.cnblogs.com/hpl525/p/6775574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!