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 相关文章推荐
由prototype_1.3.1进入javascript殿堂-类的初探
Nov 06 Javascript
jquery ajax 检测用户注册时用户名是否存在
Nov 03 Javascript
jQuery的运行机制和设计理念分析
Apr 05 Javascript
Javascript delete 引用类型对象
Nov 01 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
Jan 31 Javascript
浅谈javascript中createElement事件
Dec 05 Javascript
node.js中的fs.stat方法使用说明
Dec 16 Javascript
详解AngularJS中module模块的导入导出
Dec 10 Javascript
如何检测JavaScript的各种类型
Jul 30 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
微信小程序wx.navigateTo方法里的events参数使用详情及场景
Jan 07 Javascript
JS pushlet XMLAdapter适配器用法案例解析
Oct 16 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 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
ThinkPHP中U方法的使用浅析
2014/06/13 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
php下pdo的mysql事务处理用法实例
2014/12/27 PHP
PHP截取IE浏览器并缩小原图的方法
2016/03/04 PHP
Symfony2学习笔记之插件格式分析
2016/03/17 PHP
php常用正则函数实例小结
2016/12/29 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
PHP的微信支付接口使用方法讲解
2019/03/08 PHP
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
nodejs构建本地web测试服务器 如何解决访问静态资源问题
2017/07/14 NodeJs
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
Node 使用express-http-proxy 做api网关的实现
2020/10/15 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
Python实现递归遍历文件夹并删除文件
2016/04/18 Python
Python之父谈Python的未来形式
2016/07/01 Python
对Python3中的input函数详解
2018/04/22 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
Tensorflow实现多GPU并行方式
2020/02/03 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
有关HTML5中背景音乐的自动播放功能
2017/10/16 HTML / CSS
某个公司的Java笔面试题
2016/03/11 面试题
2014小学教师年度考核工作总结
2014/12/03 职场文书
机动车交通事故协议书
2015/01/29 职场文书
超市督导岗位职责
2015/04/10 职场文书
钢琴师观后感
2015/06/12 职场文书