首先,还是来看一下炫酷的页面:

今天就边做边说了:

一。准备工作

新建css,js,img文件夹存放相应文件,并在demo.html文件中引入外部文件(注意要把jquery文件引入),这里就不过多描述了。

二。图片展示

<div id="main">
<div class="pic">
<img src="img/1.jpg" />
</div> <div class="pic">
<img src="img/2.jpg" />
</div> <div class="pic">
<img src="img/3.jpg" />
</div> <div class="pic">
<img src="img/4.jpg" />
</div> <div class="pic">
<img src="img/5.jpg" />
</div> <div class="pic">
<img src="img/6.jpg" />
</div> <div class="pic">
<img src="img/7.jpg" />
</div> <div class="pic">
<img src="img/8.jpg" />
</div> <div class="pic">
<img src="img/9.jpg" />
</div> <div class="pic">
<img src="img/10.jpg" />
</div> <div class="pic">
<img src="img/1.jpg" />
</div> <div class="pic">
<img src="img/2.jpg" />
</div> <div class="pic">
<img src="img/3.jpg" />
</div> <div class="pic">
<img src="img/4.jpg" />
</div>
<div class="pic">
<img src="img/5.jpg" />
</div> <div class="pic">
<img src="img/6.jpg" />
</div> <div class="pic">
<img src="img/7.jpg" />
</div>
</div>

一个大div包裹全局,小的div包裹图片,这里为什么要这么多图片呢,是因为刚开始的时候图片要占满屏幕,否则会不美观。而且jq中用的是监听滚动条的方法加载图片,图片太少的话滚动条都不会出现,自然不能执行滚动条的事件。

分析一下图片的显示效果:

1.图片有白色的边框,阴影

2.图片是平铺的

*{
padding:;
margin:;
}
#main{
position:relative;
}
#main .pic{
width:170px;
box-shadow: 0 0 6px #CCCCCC;
float:left;
margin:5px;
}
#main .pic img{
width:160px;
height:auto;
border: 5px #FFFFFF solid;
}

相信上面的代码是很好理解的,到此为止图片已经平铺了。

三。让图片顺序依次排列

虽然执行完上面的代码以后图片是平铺了,但效果却是很不好的,它没有像图片展示的那样高低排列。

如何实现高低排列:

1.第一行肯定是没有问题的,因为第一行的每张图上面没有图片,也就是说是平的;

2.第二行就可以取第一行中高度最小的图片,然后把第二行的第一张图片放在下面(这里用绝对定位控制图片位置);

3.以此类推,把第二行第一张图片插入以后,在选择这时候第一行中最短的,并把图片放在下面。

function waterFall(){
var divWidth = $("#main .pic").eq(0).width()+10; //获取页面中包裹图片的div宽度,这里的+10是因为在css中设置的margin是5px,左右加起来就是10(相当于这个div的实际宽度比预设多10px)
var num = Math.floor($(window).width()/divWidth); // Math.floor是向下取整,获取整个浏览器的宽度除以"图片的占宽"可以获得图片可以排放多少列,这也就是向下取整的原因了 $("#main").css({ //设置整个div的宽度,并让其居中显示
"width":divWidth*num,
"margin": "0 auto"
});
var picArr = []; //定义一个数组
$("#main .pic").each(function(index){ //遍历所有.pic的div
var picHeight = $("#main .pic").eq(index).height();//获取每个div的高度
if(index<num){ //如果是第一行
picArr[index] = picHeight;//把高度存储进数组
}else{ //如果数组不是第一行的数据了
var minH = Math.min.apply(null,picArr); //获取数组中最小的高度
var minIndex = $.inArray(minH,picArr); //获取最小高度的index(位置)
$(this).css({ //设置这个div的位置
"position":"absolute",
"top":minH+10, //设置它距离上方的距离,这里加10是因为在css中设置的margin是5px,上下加起来是10px
"left":$("#main .pic").eq(minIndex).position().left //获取最小高度距离左边的距离
});
picArr[minIndex]+=$("#main .pic").eq(index).height()+10; //把最小的高度存入数组中
}
});
}

在页面加载完后执行waterFall()方法,这个句子就不写啦。到此为止就可以看到图片依次有序排列啦

四。瀑布流的实现

思路:这里是监听浏览器的滚动条,当滚动条到达底部时就加载预定数组中的图片

$(window).on("load",function(){
waterFall();
var pics = ["1.jpg","2.jpg","3.jpg","4.jpg","5.jpg"];
window.onscroll = function(){
if ($(document).scrollTop() >= $(document).height() - $(window).height()) {
$.each(pics,function(index,value){
$(".pic").eq(0).clone().appendTo("#main").find("img").attr("src","img/"+value);
});
waterFall();
}
}
});

appendTo() 方法在被选元素的结尾(仍然在内部)插入指定内容。

当然这里是当浏览器的滚动条到达底部的时候才会加载图片,如果觉得这样用户体验不好的话,可以在if里面设置,例如:if ($(document).scrollTop()+100 >= $(document).height() - $(window).height())

jquery瀑布流的制作的更多相关文章

  1. jQuery瀑布流从不同方向加载3种效果演示

    很实用的一款插件jQuery瀑布流从不同方向加载3种效果演示在线预览 下载地址 实例代码 <section class="grid-wrap"> <ul clas ...

  2. 8款实用的Jquery瀑布流插件

    1.网友Null分享Jquery响应式瀑布流布局插件 首先非常感谢网友Null的无私分享,此作品是一款响应式瀑布流布局Jquery插件,网友Null增加了一个屏幕自适应和响应式,响应式就是支持智能手机 ...

  3. jquery瀑布流排列样式代码

    <!DOCTYPE html><html><head lang="en"> <meta charset="gb2312" ...

  4. jQuery瀑布流插件——jQuery.Waterfall

    插件--jQuery.Waterfall 思路: 其实只要了解了整个流程,要实现这个插件也不难,大家都玩过俄罗斯方块吧,原理差不多,找到合适的地方叠上去就好了,在这里,每个块的宽度是必需给定的,然后计 ...

  5. 炫酷的jquery瀑布流

    最近做了一个瀑布流效果,思路很简单 首先计算屏幕一行可以放多少个图片,然后在第二行开始,计算每一列的高度并取出最小值,将新图片加载在最小列高度下,如此循环,并且设定一个条件,当滑动到一定距离后,开始重 ...

  6. jQuery瀑布流无限拖三大利器:masonry+imagesloaded+infinitescroll

    瀑布流已经是几乎过时的技术了,不过对于很多想要快速实现它的朋友而言,却绝非易事,因为即使我们已经有很多现成的代码,却发现在自己的开发环境中无法快速得到自己想要的结果.就像我们现在要介绍的三大利器(ma ...

  7. jQuery瀑布流插件masonry

    项目要做荣誉证书的排版,宽度是统一的,但是高度不一致 采用瀑布流的效果来实现 默认先实现前15张,点击按钮再加载全部剩下的数据 效果图 首先是html部分,写好样式 <!-- 荣誉资质 --&g ...

  8. JQuery瀑布流特效(练习)

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  9. jQuery瀑布流详解(PC及移动端)

    前言 瀑布流布局已成为当今非常普遍的图片展示方式,无论是PC还是手机等移动设备上.这种布局图片的样式大概分为三种:等高等宽.等宽不等高.等高不等宽,接下来我们就最为普遍的等宽不等高形式来作为示例. 我 ...

随机推荐

  1. Hadoop 2.x 生态系统及技术架构图

    一.负责收集数据的工具:Sqoop(关系型数据导入Hadoop)Flume(日志数据导入Hadoop,支持数据源广泛)Kafka(支持数据源有限,但吞吐大) 二.负责存储数据的工具:HBaseMong ...

  2. 初探java中this的用法

    一般this在各类语言中都表示“调用当前函数的对象”,java中也存在这种用法: public class Leaf { int i = 0; Leaf increment(){ i++; retur ...

  3. linux系统下基于mono部署asp.net,使用ef6与mysql出现的问题【索引】

    git clone github.com/mono的源码,日期:2014-06-19,百度网盘链接:http://pan.baidu.com/s/1kTG9EUb 关于asp.net利用mono部署到 ...

  4. Spring7:基于注解的Spring MVC(下篇)

    Model 上一篇文章<Spring6:基于注解的Spring MVC(上篇)>,讲了Spring MVC环境搭建.@RequestMapping以及参数绑定,这是Spring MVC中最 ...

  5. Node.js实现RESTful api,express or koa?

    文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...

  6. Unity3D和Egret3D的基情

    Unity3D依靠多平台发布这个核心特点,目前如日中天,屌丝引擎之王绝无来者.Egret白鹭引擎,也着实在微信上刷了一屏又一屏.这二者似乎风马牛不相及,但是这个无处不搞基的年代,让一切皆有可能. U3 ...

  7. Oracle ------ SQLDeveloper中SQL语句格式化快捷键

    Oracle SQL Developer中SQL语句格式化快捷键: 每次sql复制到SQL Developer面板的时候,格式老不对,而且看起来很不舒服,所有的sql都挤在一行完成. 这时我们可以全选 ...

  8. 如何调用Google地图?

    在建设网站中用到地图是很常见的,在国内大部分都是用百度地图,但是有时候可能会用到国外地址,这时候就只能使用谷歌地图了. 方法一.使用框架引入谷歌地图 用框架引入谷歌地址是最简单的方法,不是专业开发人员 ...

  9. Vuex2.0+Vue2.0构建备忘录应用实践

    一.介绍Vuex Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化,适合于构建中大型单页应用. ...

  10. [SQL] SQL 基础知识梳理(五) - 复杂查询

    SQL 基础知识梳理(五) - 复杂查询 [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5939796.html 序 这是<SQL 基础知识梳理( ...