浅谈tudou土豆网首页图片延迟加载的效果


Posted in Javascript onJune 23, 2010

这样做的好处当然是如果有用户不需要查看下面的内容,则免去了下面所有图片的请求,这对减少服务器的压力还是很有帮助的。
实现:
其实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到本地运行下就可以看到效果了。
Javascript 相关文章推荐
JavaScript中string对象
Jun 12 Javascript
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
jQuery鼠标事件汇总
Aug 30 Javascript
4种JavaScript实现简单tab选项卡切换的方法
Jan 06 Javascript
JavaScript下的时间格式处理函数Date.prototype.format
Jan 27 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
May 26 Javascript
利用angularjs1.4制作的简易滑动门效果
Feb 28 Javascript
详解vue.js全局组件和局部组件
Apr 10 Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 Javascript
jquery实现上传图片功能
Jun 29 jQuery
微信小程序实现简单购物车功能
Dec 30 Javascript
javascript实现计算器功能详解流程
Nov 01 Javascript
有道JavaScript监听浏览器的问题
Jun 23 #Javascript
utf-8编码引起js输出中文乱码的解决办法
Jun 23 #Javascript
js和jquery批量绑定事件传参数一(新猪猪原创)
Jun 23 #Javascript
获取dom元素那些讨厌的位置封装代码
Jun 23 #Javascript
jquery ajax 同步异步的执行示例代码
Jun 23 #Javascript
jquery tab插件制作实现代码
Jun 22 #Javascript
jquery多浏览器捕捉回车事件代码
Jun 22 #Javascript
You might like
第九节 绑定 [9]
2006/10/09 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
js最简单的拖拽效果实现代码
2010/09/24 Javascript
纯JS实现的批量图片预览加载功能
2011/08/14 Javascript
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
js获取html参数及向swf传递参数应用介绍
2013/02/18 Javascript
BootStrap创建响应式导航条实例代码
2016/05/31 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
微信小程序-获得用户输入内容
2017/02/13 Javascript
js实现无缝滚动图(可控制当前滚动的方向)
2017/02/22 Javascript
详解tween.js的使用教程
2017/09/14 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
vue.js内置组件之keep-alive组件使用
2018/07/10 Javascript
回顾Javascript React基础
2019/06/15 Javascript
react实现同页面三级跳转路由布局
2019/09/26 Javascript
详解Vue之计算属性
2020/06/20 Javascript
Vue实现图书管理小案例
2020/12/03 Vue.js
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
Python中将字典转换为列表的方法
2016/09/21 Python
python GUI实例学习
2017/11/21 Python
Python中将dataframe转换为字典的实例
2018/04/13 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
应用OpenCV和Python进行SIFT算法的实现详解
2019/08/21 Python
python之array赋值技巧分享
2019/11/28 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
CSS3教程(2):网页边框半径和网页圆角
2009/04/02 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
上班上网检讨书
2014/01/29 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
六年级学生评语
2014/04/22 职场文书
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android