浅谈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 相关文章推荐
鼠标事件延时切换插件
Mar 12 Javascript
js监听输入框值的即时变化onpropertychange、oninput
Jul 13 Javascript
js 立即调用的函数表达式如何写
Jan 12 Javascript
node.js下when.js 的异步编程实践
Dec 03 Javascript
AngularJS在IE下取数据总是缓存问题的解决方法
Aug 05 Javascript
jQuery+HTML5+CSS3制作支持响应式布局时间轴插件
Aug 10 Javascript
简单实现js倒计时功能
Feb 13 Javascript
vue 2.0封装model组件的方法
Aug 03 Javascript
20行JS代码实现粘贴板复制功能
Feb 06 Javascript
有趣的JavaScript隐式类型转换操作实例分析
May 02 Javascript
jQuery实现动态操作table行
Nov 23 jQuery
Vue 事件的$event参数=事件的值案例
Jan 29 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
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
session在php5.3中的变化 session_is_registered() is deprecated in
2013/11/12 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
php计算两个坐标(经度,纬度)之间距离的方法
2015/04/17 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
拖动Html元素集合 Drag and Drop any item
2006/12/22 Javascript
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
jquery.cookie实现的客户端购物车操作实例
2015/12/24 Javascript
jQuery学习心得总结(必看篇)
2016/06/10 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python中几种操作字符串的方法的介绍
2015/04/09 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
python 调用有道api接口的方法
2019/01/03 Python
python 获得任意路径下的文件及其根目录的方法
2019/02/16 Python
python3中确保枚举值代码分析
2020/12/02 Python
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
英文版销售经理个人求职信
2013/11/20 职场文书
就业协议书范本
2014/04/11 职场文书
求职信模板
2014/05/23 职场文书
汉语言文学专业自荐信
2014/06/11 职场文书
ORACLE数据库对long类型字段进行模糊匹配的解决思路
2021/04/07 Oracle
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers