jQuery一直没系统的学,只知道是js库,封装了好多js函数,方便了开发。以前做过一个原生的图片网站瀑布流效果,超级麻烦,这次用了jQuery方法,瞬间代码浓缩了,只有56行js代码。神奇的让我来把其中的几个函数具体记录一下。

  首先,在WebStorm中新建一个工程,导入jquery库和几张img放在img文件夹下,新建html和css文件,用来搭建基本的网页结构。我们设定图片的宽度固定,高度不定,绝对定位,左浮动。这里就不细说了。我们主要讲jquery部分的知识。

  这里我们讲一下我们要实现的效果,瀑布流效果就是视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据并附加至当前尾部。除第一行元素外,其他的元素要按照之前的排列中高度最低的下面。一次循环。当屏幕滚动的时候,判断加载条件,动态加载。

  开始吧。

  (1)HTML文档整体加载,监听window的load事件.

$(document).ready(function(){
$(window).on("load",function(){ };
};

  (2).判断图片的位置。即当图片多于一行时,剩下的图片应该摆放在哪里。

function imgLocation(){
//用jquery获取所有的box
var box = $(".box");
//box的宽度
var boxWidth = box.eq(0).width();
//每行共有几个box
var num = Math.floor($(window).width()/boxWidth);
//存放box的boxHeight
var boxArr = [];
//each方法遍历box,当只有一行的时候记录boxHeight,多于一行则找出minBoxHeight,并设置样式。
box.each(function(index,value){
var boxHeight = box.eq(index).height();
if(index<num){
boxArr[index] = boxHeight;
}else{
var minBoxHeight = Math.min.apply(null,boxArr);
var minBoxIndex = $.inArray(minBoxHeight,boxArr);
$(value).css({
"position":"absolute",
"top":minBoxHeight,
"left":box.eq(minBoxIndex).position().left
});
//动态变化minBoxIndex
boxArr[minBoxIndex] += box.eq(index).height();
}
});
}

  (3).监听屏幕的滚动事件。当屏幕的高度大于最后一张图片的高度的1/2时,加载资源。

function scrollside(){
var box = $(".box");
var lastboxHeight = box.last().get(0).offsetTop+Math.floor(box.last().height()/2);
var documentHeight=$(document).width();
var scrollHeight=$(window).scrollTop();
return (lastboxHeight<scrollHeight+documentHeight)?true:false;
}

  (4).监听屏幕的函数写好以后,我们先在load加载事件中本地写一个JSON数据,传递图片资源。

    即:var dataImg={"data":[{"src":"1.jpg"},{"src":"2.jpg"},{"src":"3.jpg"},{"src":"4.jpg"},{"src":"5.jpg"}]};

  (5).实现window的onscroll事件。当满足(3)中滚动的条件时,我们动态的创建box,然后appendTo相应的父容器中

window.onscroll=function(){
if(scrollside()){
//each()方法遍历数据加载进来
$.each(dataImg.data,function(index,value){
var box = $("<div>").addClass("box").appendTo($("#container"));
var content = $("<div>").addClass("content").appendTo(box);
console.log("./img/"+$(value).attr("src"));
$("<img>").attr("src","./img/"+$(value).attr("src")).appendTo(content);
});
imgLocation();
}
};

  至此,用jQuery实现照片瀑布流的方法已经实现了。在整个过程中,我主要学到了

  •   each()方法遍历数组,
  • eq()
  •   Math.min.apply()找出数组中最小数,
  •   jquery.inarray(value,array) 确定第一个参数在数组中的位置,
  •   $(value).css用jquery设置css样式,
  •   动态添加HTML文档节点,并从JSON数据中获取相应的属性。

工程文件放在网盘了,朋友有需要的话可以去下载。jquery实现瀑布流效果。链接: http://pan.baidu.com/s/1dEEmr5n 密码: cjic

用jQuery实现瀑布流效果学习笔记的更多相关文章

  1. 【前端】用jQuery实现瀑布流效果

    jQuery实现瀑布流效果 何为瀑布流: 瀑布流,又称瀑布流式布局.是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部.最早 ...

  2. jquery实现瀑布流效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. jQuery淡入淡出瀑布流效果

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 用JavaScript和jQuery实现瀑布流

    ▓▓▓▓▓▓ 大致介绍 在慕课网上学习了用原生js和jQuery实现瀑布流,在这里做个笔记 ▓▓▓▓▓▓ 用JavaScript实现 基本结构: <div id="main" ...

  5. jQuery实现瀑布流

    瀑布流布局多用于加载图片,或者图片配上文字.视觉表现为参差不齐的多栏布局.随着页面滚动条向下滚动,还会不断加载数据块并附加至当前尾部.本文就来利用jQuery实现一个图片瀑布流的效果. 1.布局. 首 ...

  6. Jquery简单瀑布流代码示例

    最近很多网站都采用瀑布流风格设计,感觉挺有个性的,比较合适做图片类型的网站,没事仿开心网做一个瀑布流示例. 需要用到Jquery,jquery.masonry.min.js <!DOCTYPE ...

  7. jquery版瀑布流

    一个月前用jquery实现了瀑布流效果,看着当时的代码有点难过……今天抽时间稍微修改了一下.额,现在看起来不是那么难受了,就来和大家分享一下.废话不多说,开始正题~ 一.演示效果 二.html代码 & ...

  8. 网友微笑分享原创Jquery实现瀑布流特效

    首先非常感谢网友微笑的无私分享,此Jquery特效是一款非常流行和实用的瀑布流布局,核心代码只有几十行,是我见过代码量最少的瀑布流布局,非常适合网友们学习哦,希望大家好好看一下这个Jquery特效的原 ...

  9. 利用JS实现简单的瀑布流效果

    哈哈, 我又来啦, 在这一段时间里, 我简单的学习了一下javascript(JS), 虽然不是很懂啦, 但是我也简单的尝试着做了点小东西, 就比如现在流行的瀑布流效果, 经过我的努力终于成功的完成了 ...

随机推荐

  1. BZOJ4195 [Noi2015]程序自动分析(离散化+并查集)

    4195: [Noi2015]程序自动分析 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 689  Solved: 296 [Submit][Sta ...

  2. NGRC远程控制

    这是大三学完计算机网络的课程之后开始写的东西,后来慢慢完善到能用的程度. 界面大概是这样 还有这样 使用Java的好处是不用修改就可以在Mac和Linux上运行(测试过Ubuntu和OS X) 缺点是 ...

  3. Django-RQ首页、文档和下载 - Django 和 RQ 集成 - 开源中国社区

    Django-RQ首页.文档和下载 - Django 和 RQ 集成 - 开源中国社区 Django-RQ 项目实现了 Django 框架和 RQ 消息队列之间的集成.

  4. Spark RDD概念学习系列之Spark Hash Shuffle内幕彻底解密(二十)

    本博文的主要内容: 1.Hash Shuffle彻底解密 2.Shuffle Pluggable解密 3.Sorted Shuffle解密 4.Shuffle性能优化 一:到底什么是Shuffle? ...

  5. mapreduce 读写lzo文件

    1.读lzo文件 需要添加以下代码,并导入lzo相关的jar包  job.setInputFormatClass(LzoTextInputFormat.class); 2.写lzo文件 lzo格式默认 ...

  6. 【Android - 框架】之OkHttp的使用

    OkHttp是一个非常优秀的网络访问框架,当下非常火的Retrofit的底层就是使用OkHttp进行封装的.接下来介绍以下OkHttp的简单使用. 1.导入依赖 在Android Studio中,在M ...

  7. 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)

    问题: 当file_get_content()函数的参数  url中是localhost时不能抓取,是127.0.0.1时可以抓取到静态html代码.实现页面静态化技术提高访问效率. test.php ...

  8. 在32位Windows 8或Windows 7上安装Windows Phone 8 SDK

    这需要一点技巧的,其实WPSDK8是支持32位系统的,可因为微软脑残的限制,安装方法如下: 这里必需要有一个工具,OllyDbg 2.0,去官网下载即可. 启动OD,在菜单打开选项窗口,在Events ...

  9. cocos2d源码剖析

    1. TextureAtlas http://www.cocoachina.com/bbs/read.php?tid-311439-keyword-TextureAtlas.html 2. Label ...

  10. Android(java)学习笔记208:Android中操作JSON数据(Json和Jsonarray)

    1.Json 和 Xml       JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的 ...