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

今天就边做边说了:

一。准备工作

新建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. POJ1743 Musical Theme [后缀数组]

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 27539   Accepted: 9290 De ...

  2. PHP相关代码

    1 <html>  <head>       <meta http-equiv="content-type" content="text/h ...

  3. 我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗

    文章背景,回答提问:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗? 我的建议是这样:1. 不要辞职.首先说,你对整个开发没有一个简单的了解,或一个系统的入门学习.换句 ...

  4. 图形数据库Neo4J简介

    最近我在用图形数据库来完成对一个初创项目的支持.在使用过程中觉得这种图形数据库实际上挺有意思的.因此在这里给大家做一个简单的介绍. NoSQL数据库相信大家都听说过.它们常常可以用来处理传统的关系型数 ...

  5. Spark笔记:复杂RDD的API的理解(上)

    本篇接着讲解RDD的API,讲解那些不是很容易理解的API,同时本篇文章还将展示如何将外部的函数引入到RDD的API里使用,最后通过对RDD的API深入学习,我们还讲讲一些和RDD开发相关的scala ...

  6. Marmoset Toolbag中的角色布光技巧 by Joe”EarthQuake”Wilson

    Sagat by Tim “spacemonkey” Appleby 有言在先 首先,我要感谢才华横溢的Tim“spacemonkey Appleby允许本教程中使用他那个极其NB的Sagat模型.不 ...

  7. ASP.NET Web API 管道模型

    ASP.NET Web API 管道模型 前言 ASP.NET Web API是一个独立的框架,也有着自己的一套消息处理管道,不管是在WebHost宿主环境还是在SelfHost宿主环境请求和响应都是 ...

  8. VR ( Virtual Reality )、AR(Augmented Reality)、MR(Mix Reality)和CR(Cinematic Reality)是什么鬼?

    整个社会对虚拟现实的研究和开发源于上个世纪六十年代,计算机图形学.人机接口技术.图像处理与模式识别.多传感技术.语音处理与音响技术.高性能计算机系统.人工智能等领域在之后半个世纪取得了长足的发展为虚拟 ...

  9. iOS--碎片知识锦集

    知识锦集day01 1.UIView的两个方法: sizeThatFits和 sizeToFit 官方文档上说: - (CGSize)sizeThatFits:(CGSize)size;     // ...

  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(27)-权限管理系统-分配用户给角色

    系列目录 分配用户给角色,跟分配角色给用户操作是基本一致的. 打开模块维护,展开SysRole模块添加一个操作码,并赋予权限 设置好之后将权限授权给管理员,在SysRole的index添加操作码与js ...