浅谈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_15_作用域分配与变量访问规则,再送个闭包
Oct 20 Javascript
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
js实现仿阿里巴巴城市选择框效果实例
Jun 24 Javascript
javascript实现tab切换特效
Nov 12 Javascript
Angularjs实现多个页面共享数据的方式
Mar 29 Javascript
浅析BootStrap模态框的使用(经典)
Apr 29 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
Oct 26 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
Dec 05 Javascript
微信小程序HTTP接口请求封装代码实例
Sep 05 Javascript
vue 父组件通过v-model接收子组件的值的代码
Oct 27 Javascript
Nuxt的路由配置和参数传递方式
Nov 06 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
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
PHP中JSON的应用技巧
2015/10/10 PHP
PHP+ajax分页实例简析
2015/12/07 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
JavaScript基础知识之方法汇总结
2016/01/24 Javascript
原生js编写2048小游戏
2017/03/17 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
深入理解jquery的$.extend()、$.fn和$.fn.extend()
2017/07/08 jQuery
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
2020/03/10 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python线程同步的实现代码
2018/10/03 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
自我鉴定书面格式
2014/01/13 职场文书
服装创业计划书范文
2014/02/05 职场文书
学校节能减排倡议书
2014/05/16 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
团队队名口号大全
2014/06/06 职场文书
市场营销专业应届生自荐信
2014/06/19 职场文书
运动会跳远广播稿5篇
2014/09/17 职场文书
五一劳动节活动总结
2015/02/09 职场文书
Pygame Time时间控制的具体使用详解
2021/11/17 Python
Python3的进程和线程你了解吗
2022/03/16 Python