浅谈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 中介者模式实例
Dec 16 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Oct 24 Javascript
js 获取、清空input type=&quot;file&quot;的值(示例代码)
Dec 24 Javascript
javascript中hasOwnProperty() 方法使用指南
Mar 09 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
Dec 14 Javascript
js禁止浏览器页面后退功能的实例(推荐)
Sep 01 Javascript
vue-lazyload图片延迟加载插件的实例讲解
Feb 09 Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 Javascript
JavaScript switch语句使用方法简介
Dec 30 Javascript
微信小程序修改checkbox的样式代码实例
Jan 21 Javascript
JavaScript实现手风琴效果
Feb 18 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
简单的过滤字符串中的HTML标记
2006/12/25 PHP
PHP 第二节 数据类型之数值型
2012/04/28 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
js库Modernizr的介绍和使用
2015/05/07 Javascript
JSON字符串和对象之间的转换详解
2015/05/26 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
详解JS数值Number类型
2018/02/07 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
python视频按帧截取图片工具
2019/07/23 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
python 动态绘制爱心的示例
2020/09/27 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
南非最大的在线时尚商店:Zando
2019/07/21 全球购物
如何开发安全的AJAX应用
2014/03/26 面试题
机械工程师的岗位职责
2013/11/17 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
安全协议书
2014/04/23 职场文书
婚礼父母答谢词
2015/01/04 职场文书
明星邀请函
2015/02/02 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python