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

今天就边做边说了:

一。准备工作

新建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. mysql 写入优化

    1 主从分离 从表读取,主表可以去掉索引 2 先写入到文件或redis,定时刷新到库 3 用nginx 4 分库 分表 每个库表的数据总量少了 插入会快一点 5 最大限度减少查库的次数 6 一条sql ...

  2. Linux系统中的Device Mapper学习

    在linux系统中你使用一些命令时(例如nmon.iostat 如下截图所示),有可能会看到一些名字为dm-xx的设备,那么这些设备到底是什么设备呢,跟磁盘有什么关系呢?以前不了解的时候,我也很纳闷. ...

  3. D3.js学习(六)

    上节我们学习了如何绘制多条曲线, 以及给不同的曲线指定不同的坐标系.在这节当中,我们会对坐标轴标签相关的处理进行学习.首先,我们来想一个问题, 如何我们的x轴上的各个标签的距离比较近,但是标签名又比较 ...

  4. 论C#逼格手册

    水文.如何让自己的代码看起来,更有逼格? 要想让自己的代码,看起来更优雅,更有逼格,更高大上,就一定要写出晦涩难懂,而又简洁的代码来. 对于类自身的全局变量,一定要加this,对于基类的,一定要加ba ...

  5. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化

    上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...

  6. jQuery +ajax +json+实现分页

    正文 首先我们创建一般处理程序,来读取数据库中内容,得到返回值. 创建文件,GetData.ashx. 我这里是用的存储过程,存储过程会再下面粘出来,至于数据只是实例,你们可根据需求自行读取数据 代码 ...

  7. 根据xml文件名获取xml数据并转化为实体。

    1.定义一个xml文件. <?xml version="1.0" encoding="utf-8" ?> <UserManager xmlns ...

  8. Node+fs+定时器(node-schedule)+MySql

    目标:将本人写博客时候的截图保存到桌面的图片 执行保存到指定文件进行整理 并写入数据库 先看最终的目录结构: package.json文件: { "name": "zqz ...

  9. Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

    指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...

  10. ASP.NET Core 中文文档 第三章 原理(10)依赖注入

    原文:Dependency Injection 作者:Steve Smith 翻译:刘浩杨 校对:许登洋(Seay).高嵩 ASP.NET Core 的底层设计支持和使用依赖注入.ASP.NET Co ...