浅谈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 相关文章推荐
jQuery实现在textarea指定位置插入字符或表情的方法
Mar 11 Javascript
JavaScript中的this,call,apply使用及区别详解
Jan 29 Javascript
用jquery快速解决IE输入框不能输入的问题
Oct 04 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
Nov 25 Javascript
vuejs 单文件组件.vue 文件的使用
Jul 28 Javascript
jQuery代码优化方法总结
Jan 29 jQuery
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
vue一个页面实现音乐播放器的示例
Feb 06 Javascript
Vue中如何实现proxy代理
Apr 20 Javascript
使用jQuery动态设置单选框的选中效果
Dec 06 jQuery
监控微信小程序中的慢HTTP请求过程详解
Jul 05 Javascript
vue动画—通过钩子函数实现半场动画操作
Aug 09 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中的常用魔术方法汇总
2016/02/14 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
2013/07/09 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
javascript构造函数以及原型对象的理解
2017/01/13 Javascript
js仿小米手机上下滑动效果
2017/02/05 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
Javascript ES6中数据类型Symbol的使用详解
2017/05/02 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
vue使用swiper.js重叠轮播组建样式
2019/11/14 Javascript
ES6如何用一句代码实现函数的柯里化
2020/01/18 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
python实现巡检系统(solaris)示例
2014/04/02 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
python组合无重复三位数的实例
2018/11/13 Python
Python装饰器限制函数运行时间超时则退出执行
2019/04/09 Python
Python 迭代,for...in遍历,迭代原理与应用示例
2019/10/12 Python
解析Python3中的Import
2019/10/13 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python中怎么表示空值
2020/06/19 Python
idea2020手动安装python插件的实现方法
2020/07/17 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
关于解决iframe标签嵌套问题的解决方法
2020/03/04 HTML / CSS
简历自我评价怎么写好呢?
2014/01/04 职场文书
yy结婚证婚词
2014/01/10 职场文书
担保书怎么写
2014/04/01 职场文书
工作失职检讨书范文
2015/05/05 职场文书
篮球拉拉队口号
2015/12/25 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang