浅谈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 相关文章推荐
关于 byval 与 byref 的区别分析总结
Oct 08 Javascript
推荐20家国外的脚本下载网站
Apr 28 Javascript
jQuery模拟360浏览器切屏效果幻灯片(附demo源码下载)
Jan 29 Javascript
详解JavaScript的内置对象
Dec 07 Javascript
从零开始学习Node.js系列教程三:图片上传和显示方法示例
Apr 13 Javascript
JS创建Tag标签的方法详解
Jun 09 Javascript
Vue学习之路之登录注册实例代码
Jul 06 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
Dec 12 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
Jan 12 Javascript
jQuery中可见性过滤器简单用法示例
Mar 31 jQuery
使用Vue Composition API写出清晰、可扩展的表单实现
Jun 10 Javascript
详解vue路由
Aug 05 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
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
php ob_flush,flush在ie中缓冲无效的解决方法
2010/05/09 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
php中file_exists函数使用详解
2015/05/08 PHP
PHP中的一些常用函数收集
2015/05/26 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
PDO::commit讲解
2019/01/27 PHP
Laravel多域名下字段验证的方法
2019/04/04 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
JavaScript 布尔操作符解析  &amp;&amp; || !
2012/08/10 Javascript
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
JavaScript模块规范之AMD规范和CMD规范
2015/10/27 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
js制作可以延时消失的菜单
2017/01/13 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
从零学python系列之从文件读取和保存数据
2014/05/23 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
python xml解析实例详解
2016/11/14 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
pytorch1.0中torch.nn.Conv2d用法详解
2020/01/10 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
SQL Server提供的3种恢复模型都是什么? 有什么区别?
2012/05/13 面试题
市场开发与营销专业求职信范文
2014/05/01 职场文书
我心目中的好老师活动方案
2014/08/19 职场文书
教师个人学习总结
2015/02/11 职场文书
村官个人总结范文
2015/03/03 职场文书
升职自荐信怎么写
2015/03/05 职场文书
暑期实践个人总结
2015/03/06 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫