jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)


Posted in Javascript onMay 23, 2012

浮动布局:即HTML结构的列,是用浮动方式。

一、功能分析:

1.判断图片是否进入可视区域;

2.用AJAX请求服务器数据;

3.将数据播入到相应的列队;

二、实现方法:

给window的scroll事件l绑定一个处理函数:做如下工作:

1.如何判断最后一行的图片,是否进入了可视区域?

如果:最后一行的某个图片距离浏览器可视区域顶部的距离值 小于 (可视区域的高度+滚动条滑动的距离值);

那么:就可以判定这个图片进入了浏览器的可视区域;

2.如何用AJAX请求服务器数据;

$.getJSON()方法,直接请求JSON格式的数据;

3.将数据播入到相应的列队;

使用$.each循环,将对应的JSON数据入到对应的列当中

$(function(){ 
//判断每个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的一个“开关” 
$("ul").each(function(index, element) { 
//引用当前的UL 
var ulThis = this; 
//引用最后一个LI 
var lastLi = $("li:last",this); 
//调用是否进入可视区域函数 
var isSee = see(lastLi); 
if(isSee && onOff){ 
onOff = false; 
//发送AJAX请求,载入新的图片 
$.getJSON("test1.js",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>") 
$("ul").eq(keysrc1).append(imgLi); 
}) 
}) 
onOff = true; 
}) 
}) 
} 
}); 
}) 
})

三、注意事项

当在执行AJAX请求的时候,是有数据在传输,所以需要一定的时间,才能获得返回的jSON数据。(有了数据,才能向UL中插入LI)而这个时候,如果用户又一次拖动滚动条,那么上面代码的isSee 还是返回true;所以又会执行AJAX请求。这里我们就需要手动设置一个“开关”,来控制。

只有当数据加载完成后,并且都添加进了对应的UL之后,再次拖动时,打开这个“开关”,即onOff设为true;,

因为数据加载完成后,意味着每列的UL里面,在最后面又多出了刚通过AJAX添加进来的LI数据,所以可以有再次的AJAX请求。

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

Javascript 相关文章推荐
学习YUI.Ext 第二天
Mar 10 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
Apr 14 Javascript
纯JS实现旋转图片3D展示效果
Apr 12 Javascript
Bootstrap文件上传组件之bootstrap fileinput
Nov 25 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
Sep 03 Javascript
详解如何构建Promise队列实现异步函数顺序执行
Oct 23 Javascript
JS实现图片拖拽交换效果
Nov 30 Javascript
JS基于ES6新特性async await进行异步处理操作示例
Feb 02 Javascript
微信小程序实现pdf、word等格式文件上传的方法
Sep 10 Javascript
node使用async_hooks模块进行请求追踪
Jan 28 Javascript
Javascript 面向对象(三)接口代码
May 23 #Javascript
Javascript 面向对象(二)封装代码
May 23 #Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
May 23 #Javascript
Javascript 闭包引起的IE内存泄露分析
May 23 #Javascript
基于jQuery的图片左右无缝滚动插件
May 23 #Javascript
判断多个input type=file是否有已经选择好文件的代码
May 23 #Javascript
jQuery 1.7.2中getAll方法的疑惑分析
May 23 #Javascript
You might like
php生成zip压缩文件的方法详解
2013/06/09 PHP
PHP工程师VIM配置分享
2015/12/15 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
使用laravel和ajax实现整个页面无刷新的操作方法
2019/10/03 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
jquery 简单导航实现代码
2009/09/11 Javascript
再谈javascript面向对象编程
2012/03/18 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
Vue 去除路径中的#号
2018/04/19 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
js的新生代垃圾回收知识点总结
2019/08/22 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
2021/03/01 jQuery
[03:39]2015国际邀请赛主赛事首日精彩回顾
2015/08/05 DOTA
[23:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第二场 6.2
2018/06/03 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
基于Python实现文件大小输出
2016/01/11 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
python email smtplib模块发送邮件代码实例
2018/04/26 Python
python更改已存在excel文件的方法
2018/05/03 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
python实现斗地主分牌洗牌
2020/06/22 Python
如何利用python检测图片是否包含二维码
2020/10/15 Python
竞争上岗演讲稿
2014/01/05 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
python​格式化字符串
2022/04/20 Python
BCL经典机 SONY ICF-5900W电路分析
2022/04/24 无线电