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 相关文章推荐
JS 常用校验函数
Mar 26 Javascript
js中window.open()的所有参数详细解析
Jan 09 Javascript
js控制input框只读实现示例
Jan 20 Javascript
JavaScript合并两个数组并去除重复项的方法
Jun 13 Javascript
JavaScript中获取纯正的undefined的方法
Mar 06 Javascript
JavaScript判断数字是否为质数的方法汇总
Jun 02 Javascript
浅谈angularjs依赖服务注入写法的注意点
Apr 24 Javascript
详解webpack4多入口、多页面项目构建案例
May 25 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
Aug 29 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
Oct 28 jQuery
JavaScript前端实现压缩图片功能
Mar 06 Javascript
Vue跨域请求问题解决方案过程解析
Aug 07 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设计聊天室步步通
2006/10/09 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
PHP获取文件相对路径的方法
2015/02/26 PHP
php自定义分页类完整实例
2015/12/25 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
从零开始学习jQuery (八) 插播:jQuery实施方案
2011/02/23 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
js拆分字符串并将分割的数据放到数组中的方法
2015/05/06 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
Bootstrap table学习笔记(2) 前后端分页模糊查询
2017/05/18 Javascript
JavaScript实现手风琴效果
2021/02/18 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python自动发邮件脚本
2017/03/31 Python
python实现远程通过网络邮件控制计算机重启或关机
2018/02/22 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
python中的decorator的作用详解
2018/07/26 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
Django web框架使用url path name详解
2019/04/29 Python
Python定时任务APScheduler的实例实例详解
2019/07/22 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
银行领导证婚词
2014/01/11 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
交通事故私了协议书
2014/04/16 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
领导欢迎词致辞
2015/01/23 职场文书
2015年实习班主任工作总结
2015/04/23 职场文书
优秀志愿者感言
2015/08/01 职场文书