jQuery-瀑布流-绝对定位布局(二)(延迟AJAX加载图片)

瀑布流-绝对定位布局,与浮动布局的区别在于

1.布局不一样:

  绝对定位:一个UL里面放置所有的绝对定位的LI;

  浮动布局:多个(一般三四个)UL分布放置LI;

2.AJAX不一样

  绝对定位:只需要将请求来的JSON数据(当然可以是别的格式的数据),插入到UL就可以了。然后再对这个新插入的LI进行TOP和LEFT设置;

  浮动布置:是将请求来的JSON数据(当然可以是别的格式的数据),分别插入到对应的UL当中,因为有绝对定位,所以不用对LI设置位置。会自动向下排列;

一、功能分析:

  1.定位每一个LI,即设置每一个LI的TOP和LEFT值;

  2.将AJAX的数据,放在LI中,插入到UL当中;

二、实现过程:

  1.设置LI的LEFT;

    在那一列?有了列数再乘以每个LI的宽度,就可以确定LEFT值

    找规律:

    现在我需要三列,那么每一列当中的LI,都有一个共同的列号(自己设置0.1.2或者A.B.C,总之自己对这三列给一个标识)这里设为

    0号第一列

    1号第二列

    2号第三列

    所以每一行,只能放三个LI

    第一个li  在 0号   第二个li 在 1号  第三个li 在 2号

    第四个li  在 0号   第五个li 在 1号  第六个li 在 2号

    所以想到用索引取模,正好可以得出0 1 2 ,0 1 2 ……

    通过这个我们就可以判断LI在那一列;

    index%3 = 0 1 2 ,0 1 2 ……

    为什么要模3,因为要得出三个数的循环。所以以后要想得出这样的循环,都可以考虑取模运算;

  2.设置TOP的值;

    因为每一列的总高度值都是不一样的。所以我们要设三个变量来存放不同列的高度值。

    为什么要取得这个值?

    1.初次加载的时候LI,的TOP值,是根据当前列高度值来设置的;

2.因为AJAX请求后的数据LI要插入到UL当中,必需知道当前列现在的总高度,然后给新的LI为它的TOP值;

其实中间有很多可以说的。但实在是太长了。我代码中注释也写的很清楚了。有问题可以留言和我交流。!!

要提一点的就是,里面有很多相同的功能,我都写到一个FUNCTION当中,方便调用。例如要设LI的TOP和LEFT,要获取LI的列数,要设置列的总高度。这都是共公的,也是功能块,所以还是单独用函数写出来好;

(function($){$.fn.extend({waterfall:function(value){value=$.extend({jsonUrl:"", dataType:"", cloum:"", liWidth:"" },value) //引用包函布瀑布流的DIV对象 var $this = $(this); //存放列的充号 var colmLeftIndex = 0; //用来存放每一列的高度值; var liHeight_0 = 0; var liHeight_1 = 0; var liHeight_2 = 0; //设置列的序号 function getcolums(col){ colmLeftIndex = col%value.cloum; } //设置当前列的高度 function getLiHeight(colIndex,hei){ switch(colIndex){ case 0: liHeight_0 += hei break; case 1: liHeight_1 += hei; break; case 2: liHeight_2 += hei; break; } } //设置每一个LI的TOP和LEFT function setLiOffset(oli,liH){ switch(colmLeftIndex){ case 0 : oli.css({"left":value.liWidth*colmLeftIndex,"top":liHeight_0}); getLiHeight(colmLeftIndex,liH); console.log(liHeight_0); break; case 1: oli.css({"left":value.liWidth*colmLeftIndex,"top":liHeight_1}); getLiHeight(colmLeftIndex,liH); break; case 2: oli.css({"left":value.liWidth*colmLeftIndex,"top":liHeight_2}); getLiHeight(colmLeftIndex,liH); break; } } //初次加载时,遍历所有的LI,并定位每一个LI的TOP和LEFT值 $this.find("li").each(function(index, element){ //当前LI的引用 var $liThis = $(this); //获得当前LI的高度值 var liH = $liThis.outerHeight(); //获得当前列的序号  getcolums(index); //把当前LI的高度值存到相应的列的总高度变量中  setLiOffset($liThis,liH)  }); //判断每个UL的最后一个LI,是否进入可视区域 function see(objLiLast){ //浏览器可视区域的高度 var see = document.documentElement.clientHeight; //滚动条滑动的距离 var winScroll = $(this).scrollTop(); //每个UL的最后一个LI,距离浏览器顶部的 var lastLisee = objLiLast.offset().top return lastLisee < (see+winScroll)?true:false; } //是否发出AJAX的“开关”; var onOff = true; $(window).scroll(function(){ //拖动滚条时,是否发送AJAX的一个“开关” $this.children("ul").each(function(index, element) { //引用当前的UL var ulThis = this; //引用最后一个LI var lastLi = $("li:last",ulThis); //调用是否进入可视区域函数 var isSee = see(lastLi); if(isSee && onOff){ onOff = false; //发送AJAX请求,载入新的图片  $.ajax({ url:value.jsonUrl, dataType:value.dataType, success:function(data){ //对返回JSON里面的list数据遍历 $.each(data.list,function(keyList,ovalue){ //对LIST里面的SRC数组遍历,取到图片路径 $.each(ovalue,function(keySrc,avalue){ $.each(avalue,function(keysrc1,value1){ var $imgLi = $("<li><a href=''><img src='" + value1 + "' alt='' /><p>11111</p></a></li>") //这里开始和浮动布局不一样了。其它部分在调用AJAX的时候,是一样的;因为这里不需要指定插入到那个UL; $this.children("ul").append($imgLi); //获取这个新插入到页面中的LI的列的序号 var _liindex = $imgLi.index(); getcolums(_liindex); //获取这个新插入到页面中的LI的高度值 var _nlih = $imgLi.outerHeight(); //设置当前LI的TOP和LEFT  setLiOffset($imgLi,_nlih); }) }) onOff = true; }) } }) } }); }) } }) })(jQuery)

DEMO下载  (这个要在本地机器上安装服务器平台。我用的是PHP套装APPSERV,里面的是APACHE)

转载于:https://www.cnblogs.com/firstdream/p/5489244.html

jQuery-瀑布流-绝对定位布局(二)(延迟AJAX加载图片)相关推荐

  1. html流式布局插件,Jquery瀑布流网格布局插件

    插件描述:一款简单且高度可定制的jQuery瀑布流网格布局插件.通过该瀑布流网格插件你可以动态添加和删除各种尺寸的图片,定义图片宽度,设置网格的列数,或使用流式布局方式,甚至还可以通过URL动态添加图 ...

  2. jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法

    博客分类: jquery-easyui jQueryAjax框架HTML  现象: AJAX返回的html无法做到自动渲染为EasyUI的样式.比如:class="easyui-layout ...

  3. ajax静态加载图片,JQuery实现Ajax加载图片的方法

    本文实例讲述了JQuery实现Ajax加载图片的方法.分享给大家供大家参考,具体如下: 最近在学习JQuery,想从原理上模拟一下无刷新的相册浏览. 最先想到的思路是利用缓存,也就是先显示提示消息,然 ...

  4. vue实现网络图片瀑布流 + 下拉刷新 + 上拉加载更多

    一.思路分析和效果图 用vue来实现一个瀑布流效果,加载网络图片,同时有下拉刷新和上拉加载更多功能效果.然后针对这几个效果的实现,捋下思路: 根据加载数据的顺序,依次追加标签展示效果: 选择哪种方式实 ...

  5. datables自定义ajax,JQuery DataTables.net自定义列宽度在ajax加载后不起作用

    因为数据表是如何实现的,你可以设置宽度为所有列,但一个.然后,该专栏将设计成占据剩余的空间. 但是,我们不希望这样.所以,我所做的是在文件的CSS部分添加一个新条目. 我说: table#tblNot ...

  6. 【转】关于WaterFall瀑布流式布局的性能优化

    市面上已存在的瀑布流式布局的网站: 拼范网:http://www.pinfun.com/ 迷尚网:http://www.mishang.com/ 凡客达人:http://star.vancl.com/ ...

  7. jquery动态加载图片数据

    这几天研究jquery,感受到了该库的强大,而且找到本不错的书   <<锋利的jquery>> 这里我只是随便做了下,上面是照片列表和两个按钮,单击小图片下面显示大图片,当点击 ...

  8. 在 JQuery Mobile 中实现瀑布流图库布局

    先来看在Windows系统的1080P显示器中显示的效果: 这个整合方式几乎没有现存的实例,是自己总结出来的方法,在此记录下来. 首先访问Masonry官网下载masonry.pkgd.min.js: ...

  9. 动态瀑布流网页布局 Jquery 源码

    动态瀑布流网页布局jQuery代码,效果超酷,自适应网页宽度,动态缩略图排列效果, 本代码包含两种演示效果, 一种是缩略图布局效果 一种是文字布局效果 下载地址: http://download.cs ...

最新文章

  1. python3 去除列表中重复的元素 保存原来顺序
  2. final阶段团队贡献分分配
  3. 【Scratch】青少年蓝桥杯_每日一题_8.09_列表
  4. OSX 使用“终端”远程登录linux主机
  5. ROS学习笔记(一)
  6. Redis常见数据类型_Redis通用指令
  7. 微信小程序---实现输入手机验证码功能
  8. Ubuntu 20.04 安装 .deb 文件报 failed to install file: not supported
  9. 【钉钉PC】PC端钉钉清除缓存
  10. Java基础知识强化之IO流笔记59:打印流
  11. connot+connect+mysql+127.0.0.1_无法远程连接 MySQL 的解决方法
  12. 动态网页技术--JSP(7)
  13. 如何从计算机中删除 Exchange Server 2003
  14. 51单片机流水灯画图打板焊元件历程
  15. 【76.57%】【codeforces 721A】One-dimensional Japanese Crossword
  16. 迈成专转本三毛计算机,念念不忘,必有回响【迈成专转本学员分享】
  17. 浙大竺可桢学院混合班计算机专业,起底黄峥毕业的浙大混合班:学霸不算牛 个个是学神...
  18. Java 培训 MySQL 体系构架、存储引擎和索引结构
  19. Mac-Windows下IDEA卡顿问题解决
  20. X Chen笔记---Centos安装XWARE使用迅雷远程下载

热门文章

  1. python爬虫怎么发布请求_http请求如何在python爬虫中实现?
  2. 博思得标签打印机驱动_惠普LaserJet 5200n驱动-惠普HP LaserJet 5200n打印机驱动下载 v61.074.561.43官方版...
  3. opencv的android.mk,android-opencv 版本下JNI Android.mk文件的书写
  4. Linux添加用户并赋管理员权限
  5. springMVC:后台传值并返回页面
  6. 【NOIP2014】【Luogu2141】珠心算测验(枚举,合并两数组相同元素个数)
  7. 【NOIP2005】【Luogu1046】陶陶摘苹果
  8. php 控制器方法,ThinkPhp3.2跨控制器调用方法
  9. PAT—1082 射击比赛(20)
  10. 2013蓝桥杯C++B:高斯日记;马虎的算式(2种解法)