两种方式实现瀑布流

一、浮动式瀑布流

实现要点:

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>

时间: 2024-10-11 07:38:49

两种方式实现瀑布流的相关文章

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo

springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)

参与该项目的文件上传和下载.一旦struts2下完成,今天springmvc再来一遍.发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Upload to

简介C#读取XML的两种方式

简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询 XML作用 对于XML,想必各位都比较了解,我也就不用费笔墨来描述它是什么了,我想在未来的Web开发中XML一定会大放异彩,XML是可扩展标记语言,使用它企 业可以制定一套自己的数据格式.用于Internet的数据

springMVC两种方式实现多文件上传及效率比较

springMVC实现 多文件上传的方式有两种,一种是我们经常使用的以字节流的方式进行文件上传,另外一种是使用springMVC包装好的解析器进行上传.这两种方式对于实 现多文件上传效率上却有着很大的差距,下面我们通过实例来看一下这两种方式的实现方式,同时比较一下在效率上到底存在着多大的差距. 1.下载相关jar包. 需要引入的jar出了springMVC的jar包外,还需要引入 com.springsource.org.apache.commons.fileupload-1.2.0.jar和

java文件读写的两种方式

今天搞了下java文件的读写,自己也总结了一下,但是不全,只有两种方式,先直接看代码: public static void main(String[] args) throws IOException { io(); buffer(); } /** * 以流的形式读写 可以使用任何文件 特别是二进制文件 * * @author hh * @date 2014-12-11 * @throws IOException */ public static void io() throws IOExce

css清除浮动的两种方式(clearfix和clear)

最近总是在用浮动,这两种方式总是浮现在眼前,或者说去掉父级和同级浮动样式总在思考中.两种方式怎么写都在base.css中. 在做瑞祥之旅的过程中,还是吃了一个大亏,就是清除浮动,不管是同级还是父级,都没清除浮动,导致经常会有div包不住子级的东西(经常一审查height=0).现利用两例子来巩固下. <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"

Android实现音频录制的两种方式

在移动APP开发中,每逢APP应用设计到多媒体开发的时候,都会让很多的程序员头疼不已,而且项目的开发进度会放慢.项目 的难度也会加大蛮多,同时APP的测试也会增加.Android中的多媒体开发,有音频的播放.音频的录制.视频的播放.视频的录制 等,虽然Android的SDK中提供了一些基础的开发API类,如音频的录制就提供了两种方式:AudioRecord录制音频和MediaRecorder录 制音频.AudioRecord类相对于MediaRecorder来说,更加接近底层,为我们封装的方法也

sparkStreaming读取kafka的两种方式

概述 Spark Streaming 支持多种实时输入源数据的读取,其中包括Kafka.flume.socket流等等.除了Kafka以外的实时输入源,由于我们的业务场景没有涉及,在此将不会讨论.本篇文章主要着眼于我们目前的业务场景,只关注Spark Streaming读取Kafka数据的方式. Spark Streaming 官方提供了两种方式读取Kafka数据: 一是Receiver-based Approach.该种读取模式官方最先支持,并在Spark 1.2提供了数据零丢失(zero-d

java中读取配置文件ResourceBundle和Properties两种方式比较

今天在开发的时候,需要把一些信息放到配置文件中,方便后续的修改,注意到用的是ResourceBundle读取配置文件的方式,记得之前也见过使用Properties的方式,就比较好奇这两种方式的区别,网上查了一下和查了一下Java API手册,简单总结记录一下: ResourceBundle和Properties的一个主要区别就是ResourceBundle支持语言国际化,当程序需要特定于语言环境的对象时,它使用 getBundle 方法加载 ResourceBundle 类: Locale lo