淺談tudou土豆網(wǎng)首頁(yè)圖片延遲加載的效果
更新時(shí)間:2010年06月23日 12:47:12 作者:
經(jīng)常上tudou網(wǎng),發(fā)現(xiàn)tudou首頁(yè)加載圖片的功能很有意思,tudou首頁(yè)從"娛樂(lè)"這個(gè)板塊往下的所有視頻的縮略圖并不是在頁(yè)面打開(kāi)后就加載的,而是當(dāng)用戶(hù)拖動(dòng)滾動(dòng)條到了"娛樂(lè)"這個(gè)板塊,才開(kāi)始加載圖片的。
這樣做的好處當(dāng)然是如果有用戶(hù)不需要查看下面的內(nèi)容,則免去了下面所有圖片的請(qǐng)求,這對(duì)減少服務(wù)器的壓力還是很有幫助的。
實(shí)現(xiàn):
其實(shí)tudou的實(shí)現(xiàn)原理很簡(jiǎn)單,
1.先把所有需要延遲加載的圖片的src都設(shè)置成同1個(gè)小圖片的連接(sprite.gif),把真真圖片的連接放進(jìn)圖片的alt屬性中,look下代碼:
<a class="inner" target="new" title="史上最重街舞選手和最柔軟街舞選手" >
<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事件,在該事件里面的重設(shè)所有class為lazyImg的圖片的src值,在土豆首頁(yè)找到如下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);
我沒(méi)有去跟入查看TUI.widget.quickPlaylist.load()方法的實(shí)現(xiàn),tudou的JS都是壓縮混淆的,看起來(lái)挺累,不過(guò)大家知道原理就可以了。
實(shí)例:
上面說(shuō)了那么多,最后還是來(lái)個(gè)實(shí)例比較實(shí)際點(diǎn),畢竟眼見(jiàn)為實(shí)嘛。
<!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>
能看的見(jiàn)到圖片:<img src="http://at-img4.tdimg.com/board/2010/5/tylc-115X55.jpg"/>
<div id="lazyBox" style="margin-top:100px;">
一開(kāi)始看不到的圖片:
<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){
// 滾動(dòng)高度超過(guò)50,加載圖片
hasShow = true;
$("#lazyBox .lazyImg").each(function(){
$(this).attr("src",$(this).attr("alt"));
});
}
});
</script>
</body>
</html>
把上面代碼copy到本地運(yùn)行下就可以看到效果了。
實(shí)現(xiàn):
其實(shí)tudou的實(shí)現(xiàn)原理很簡(jiǎn)單,
1.先把所有需要延遲加載的圖片的src都設(shè)置成同1個(gè)小圖片的連接(sprite.gif),把真真圖片的連接放進(jìn)圖片的alt屬性中,look下代碼:
復(fù)制代碼 代碼如下:
<a class="inner" target="new" title="史上最重街舞選手和最柔軟街舞選手" >
<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事件,在該事件里面的重設(shè)所有class為lazyImg的圖片的src值,在土豆首頁(yè)找到如下JS:
復(fù)制代碼 代碼如下:
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);
我沒(méi)有去跟入查看TUI.widget.quickPlaylist.load()方法的實(shí)現(xiàn),tudou的JS都是壓縮混淆的,看起來(lái)挺累,不過(guò)大家知道原理就可以了。
實(shí)例:
上面說(shuō)了那么多,最后還是來(lái)個(gè)實(shí)例比較實(shí)際點(diǎn),畢竟眼見(jiàn)為實(shí)嘛。
復(fù)制代碼 代碼如下:
<!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>
能看的見(jiàn)到圖片:<img src="http://at-img4.tdimg.com/board/2010/5/tylc-115X55.jpg"/>
<div id="lazyBox" style="margin-top:100px;">
一開(kāi)始看不到的圖片:
<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){
// 滾動(dòng)高度超過(guò)50,加載圖片
hasShow = true;
$("#lazyBox .lazyImg").each(function(){
$(this).attr("src",$(this).attr("alt"));
});
}
});
</script>
</body>
</html>
把上面代碼copy到本地運(yùn)行下就可以看到效果了。
相關(guān)文章
簡(jiǎn)單實(shí)現(xiàn)JS倒計(jì)時(shí)效果
這篇文章主要教大家如何簡(jiǎn)單實(shí)現(xiàn)JS倒計(jì)時(shí)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12
js 輸入框 正則表達(dá)式(菜鳥(niǎo)必看教程)
下面小編就為大家?guī)?lái)一篇js輸入框使用正則表達(dá)式校驗(yàn)輸入內(nèi)容的實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
JS實(shí)現(xiàn)的點(diǎn)擊表頭排序功能示例
這篇文章主要介紹了JS實(shí)現(xiàn)的點(diǎn)擊表頭排序功能,可實(shí)現(xiàn)針對(duì)表格中的字母、數(shù)字、日期等格式進(jìn)行排序的功能,涉及javascript針對(duì)頁(yè)面table元素的獲取及字符串、數(shù)字等排序操作相關(guān)技巧,需要的朋友可以參考下2017-03-03
JavaScript?Object.defineProperty與proxy代理模式的使用詳細(xì)分析
這篇文章主要介紹了JavaScript?Object.defineProperty與proxy代理模式的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-10-10
BootStrap點(diǎn)擊下拉菜單項(xiàng)后顯示一個(gè)新的輸入框?qū)崿F(xiàn)代碼
這篇文章主要介紹了BootStrap點(diǎn)擊下拉菜單項(xiàng)后顯示一個(gè)新的輸入框?qū)崿F(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2016-05-05
mock.js模擬數(shù)據(jù)的實(shí)現(xiàn)
在沒(méi)有后端提供數(shù)據(jù)的情況下,前端人員在自己寫(xiě)demo或者練手項(xiàng)目的時(shí)候可以使用mock.js來(lái)模擬數(shù)據(jù),本文主要介紹了mock.js模擬數(shù)據(jù)的實(shí)現(xiàn),感興趣的可以了解一下2023-11-11
JS圖片延遲加載插件LazyImgv1.0用法分析【附demo源碼下載】
這篇文章主要介紹了JS圖片延遲加載插件LazyImgv1.0用法,結(jié)合實(shí)例形式分析了使用圖片延遲加載插件LazyImgv1.0的注意事項(xiàng)與核心操作技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下2017-09-09

