这样做的好处当然是如果有用户不需要查看下面的内容,则免去了下面所有图片的请求,这对减少服务器的压力还是很有帮助的。
实现:
其实tudou的实现原理很简单,
1.先把所有需要延迟加载的图片的src都设置成同1个小图片的连接(sprite.gif),把真真图片的连接放进图片的alt属性中,look下代码:
复制代码 代码如下:
<a class="inner" target="new" title="史上最重街舞选手和最柔软街舞选手" href="http://www.tudou.com/programs/view/Utmt1_6Z-lU/">
<img width="120" height="90" class="pack_clipImg lazyImg" alt="http://i01.img.tudou.com/data/imgs/i/051/720/095/p.jpg" src="http://css.tudouui.com/skin/__g/img/sprite.gif" coords="_DAA"/>
</a>
2. 绑定window.scroll事件,在该事件里面的重设所有class为lazyImg的图片的src值,在土豆首页找到如下JS:
复制代码 代码如下:
var o=function(){
var s=TUI.pos.scrollTop(),q=c;
if(q.box[0]){
var r=q.box.offset().top;
if(r-s>0&&r-TUI.pos.windowHeight()<s){
q.init()
}else{
q.stop()
}
}
if(!h||s<590){return true}
TUI.widget.quickPlaylist.load();
h=false
};
o();
$(window).bind("scroll",o);
我没有去跟入查看TUI.widget.quickPlaylist.load()方法的实现,tudou的JS都是压缩混淆的,看起来挺累,不过大家知道原理就可以了。
实例:
上面说了那么多,最后还是来个实例比较实际点,毕竟眼见为实嘛。
复制代码 代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
</head>
<body>
能看的见到图片:<img src="http://at-img4.tdimg.com/board/2010/5/tylc-115X55.jpg"/>
<div id="lazyBox" style="margin-top:100px;">
一开始看不到的图片:
<img width="120" height="90" style="border:1px solid blue;" class="lazyImg" alt="http://i01.img.tudou.com/data/imgs/i/051/720/095/p.jpg" src="http://css.tudouui.com/skin/__g/img/sprite.gif" coords="_DAA"/>
<img width="120" height="90" style="border:1px solid blue;" class="lazyImg" alt="http://i01.img.tudou.com/data/imgs/i/051/871/396/m20.jpg" src="http://css.tudouui.com/skin/__g/img/sprite.gif" coords="_DBA"/>
</div>
<div style="height:1000px;">
</div>
<script type="text/javascript">
var hasShow = false;
$(window).bind("scroll",function(){
if(hasShow==true){
$(window).unbind("scroll");
return;
}
var t = $(document).scrollTop();
if(t>50){
// 滚动高度超过50,加载图片
hasShow = true;
$("#lazyBox .lazyImg").each(function(){
$(this).attr("src",$(this).attr("alt"));
});
}
});
</script>
</body>
</html>
把上面代码copy到本地运行下就可以看到效果了。
相关推荐:
JQuery toggle使用分析
从Web查询数据库之PHP与MySQL篇
Jquery AJAX 框架的使用方法
ASP 调用dll及封装dll实例
js cookies实现简单统计访问次数
配置 SQLServer2005 以允许远程连接
十种领带打法 图文教程
JavaScript 浮点数运算 精度问题
javascript 线性渐变二
asp 采集程序常用函数分析
aspnet_isapi.dll设置图文方法.net程序实现伪静态
Flex Bindable 的用法
Oracle 语句优化分析说明第1/2页
javascript 面向对象编程 聊聊对象的事
jquery 模式对话框终极版实现代码
C# ListView双击Item事件
浅谈javascript 面向对象编程
javascript 面向对象,实现namespace,class,继承,重载
Mootools 1.2教程 滑动效果(Slide)
extjs 学习笔记(一) 一些基础知识
添加FCKeditor插件需要注意的地方
apache 二级域名解析实现方法
SQLSERVER中union,cube,rollup,cumpute运算符使用说明
jQuery 使用手册(一)
struts2 jquery 打造无限层次的树
在oracle 数据库中查看一个sql语句的执行时间和SP2-0027错误
PHP教程 变量定义
MSSQL 首字母替换成大写字母
JavaScript iframe的相互操作浅析
传智播客学习之java 反射
jquery 动态调整textarea高度
serv_U 域离线 解决方法
实现按关健字模糊查询,并按匹配度排序的SQL语句
jQuery 判断元素上是否绑定了事件
asp 自定义分段函数/求第N名成绩
jquery中的$(document).ready()与window.onload的区别
禁止在图片上使用右键
Oracle 多行记录合并/连接/聚合字符串的几种方法
js removeChild 障眼法 可能出现的错误
json 实例详细说明教程
Mysql5 字符集编码问题解决
javascript 表单中浏览文件的“浏览”按钮修改
sqlserver 中ntext字段的批量替换(updatetext的用法)
MSSQL 数据库同步教程
sql2005 数据同步方法
javascript void(0)的妙用
JavaScript读取中文cookie时的乱码问题的解决方法
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
层序遍历在ExtJs的TreePanel中的应用
5款Javascript颜色选择器