浅谈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高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
Feb 27 Javascript
javascript中节点的最近的相关节点访问方法
Mar 20 Javascript
javascrip关于继承的小例子
May 10 Javascript
解决json日期格式问题的3种方法
Feb 02 Javascript
jQuery实现分章节锚点“回到顶部”动画特效代码
Oct 23 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
Dec 26 Javascript
JavaScript用JSONP跨域请求数据实例详解
Jan 06 Javascript
vue-cli V3.0版本的使用详解
Oct 24 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
Apr 23 Javascript
javascript实现下拉菜单效果
Feb 09 Javascript
vue elementUI表格控制对应列
Apr 13 Vue.js
有道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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
php+xml编程之xpath的应用实例
2015/01/24 PHP
php动态函数调用方法
2015/05/21 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
JS延迟加载(setTimeout) JS最后加载
2010/07/15 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
Jquery简单实现GridView行高亮的方法
2015/06/15 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
webpack配置sass模块的加载的方法
2017/07/30 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
Python实现的多线程端口扫描工具分享
2015/01/21 Python
Python正则表达式知识汇总
2017/09/22 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
2019/02/26 Python
区分python中的进程与线程
2020/08/13 Python
css3实现书本翻页效果的示例代码
2021/03/08 HTML / CSS
食品安全责任书
2014/04/15 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
matplotlib如何设置坐标轴刻度的个数及标签的方法总结
2021/06/11 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js
springboot使用Redis作缓存使用入门教程
2021/07/25 Redis
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js
box-shadow单边阴影的实现
2023/05/21 HTML / CSS