欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

網(wǎng)頁(yè)圖片延時(shí)加載的js代碼

 更新時(shí)間:2010年04月22日 20:39:18   作者:  
大家如果使用firebug去查看的話就會(huì)發(fā)現(xiàn),當(dāng)你滾動(dòng)到相應(yīng)的行時(shí),當(dāng)前行的圖片才即時(shí)加載的,這樣子的話頁(yè)面在打開只加可視區(qū)域的圖片,而其它隱藏的圖片則不加載,一定程序上加快了頁(yè)面加載的速度,對(duì)于比較長(zhǎng)的頁(yè)面來說,這個(gè)方案是比較好的。

實(shí)現(xiàn)原理 

把所有需要延時(shí)加載的圖片改成如下的格式:

<img lazy_src="圖片路徑" border="0"/>

然后在頁(yè)面加載時(shí),把所有使用了lazy_src的圖片都保存到數(shù)組里,然后在滾動(dòng)時(shí)計(jì)算可視區(qū)域的top,然后把延時(shí)加載的圖片中top小于當(dāng)前可視區(qū)域(即圖片出現(xiàn)在可視區(qū)域內(nèi))的圖片的src的值用lazy_src的來替換(加載圖片)

代碼

lazyLoad=(function() {
var map_element = {};
var element_obj = [];
var download_count = 0;
var last_offset = -1;
var doc_body;
var doc_element;
var lazy_load_tag;
function initVar(tags) {
doc_body = document.body;
doc_element = document.compatMode == 'BackCompat' ? doc_body: document.documentElement;
lazy_load_tag = tags || ["img", "iframe"];
};
function initElementMap() {
var all_element = [];
//從所有相關(guān)元素中找出需要延時(shí)加載的元素
for (var i = 0,
len = lazy_load_tag.length; i < len; i++) {
var el = document.getElementsByTagName(lazy_load_tag[i]);
for (var j = 0,
len2 = el.length; j < len2; j++) {
if (typeof(el[j]) == "object" && el[j].getAttribute("lazy_src")) {
element_obj.push(all_element[key]);
}
}
}

for (var i = 0,
len = element_obj.length; i < len; i++) {
var o_img = element_obj[i];
var t_index = getAbsoluteTop(o_img);//得到圖片相對(duì)document的距上距離
if (map_element[t_index]) {
map_element[t_index].push(i);
} else {
//按距上距離保存一個(gè)隊(duì)列
var t_array = [];
t_array[0] = i;
map_element[t_index] = t_array;
download_count++;//需要延時(shí)加載的圖片數(shù)量
}
}

};
function initDownloadListen() {
if (!download_count) return;
var offset = (window.MessageEvent && !document.getBoxObjectFor) ? doc_body.scrollTop: doc_element.scrollTop;
//可視化區(qū)域的offtset=document的高+
var visio_offset = offset + doc_element.clientHeight;
if (last_offset == visio_offset) {
setTimeout(initDownloadListen, 200);
return;
}
last_offset = visio_offset;
var visio_height = doc_element.clientHeight;
var img_show_height = visio_height + offset;
for (var key in map_element) {
if (img_show_height > key) {
var t_o = map_element[key];
var img_vl = t_o.length;
for (var l = 0; l < img_vl; l++) {
element_obj[t_o[l]].src = element_obj[t_o[l]].getAttribute("lazy_src");
}
delete map_element[key];
download_count--;
}
}
setTimeout(initDownloadListen, 200);
};
function getAbsoluteTop(element) {
if (arguments.length != 1 || element == null) {
return null;
}
var offsetTop = element.offsetTop;
while (element = element.offsetParent) {
offsetTop += element.offsetTop;
}
return offsetTop;
}
function init(tags) {
initVar(tags);
initElementMap();
initDownloadListen();
};
return {
init: init
}
})();

使用方法:把頁(yè)面上需要延時(shí)加載的圖片src改成為lazy_src,然后把上面的js放到body最后面,然后調(diào)用:lazyLoad.init();

調(diào)戲的方法可以使用firebug來查看一時(shí)圖片是否是延時(shí)加載。

另外:

如果你的頁(yè)面上存在有內(nèi)容切換的欄目的話,可能在切換時(shí)切換的內(nèi)容里的圖片可能會(huì)不顯示,處理的方法是在內(nèi)容時(shí)單獨(dú)圖片加載處理,如:

///切換內(nèi)容的代碼...
chlid.find("img[init_src]").each(function(){
$(this).attr("src",$(this).attr("init_src"));
$(this).removeAttr("init_src");

});

相關(guān)文章

  • uni-app中彈窗的使用與自定義彈窗

    uni-app中彈窗的使用與自定義彈窗

    眾所周知彈窗在我們實(shí)際開發(fā)場(chǎng)景中是非常常用的,最近在工作中就遇到了相關(guān)需求,所以下面這篇文章主要給大家介紹了關(guān)于uni-app中彈窗使用與自定義彈窗的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 原生js實(shí)現(xiàn)淘寶首頁(yè)點(diǎn)擊按鈕緩慢回到頂部效果

    原生js實(shí)現(xiàn)淘寶首頁(yè)點(diǎn)擊按鈕緩慢回到頂部效果

    本例將實(shí)現(xiàn)這樣的一個(gè)效果:下拉到一定距離后按鈕才顯示出來,鼠標(biāo)放到按鈕上時(shí),按鈕背景會(huì)變成灰色,并且圖標(biāo)變成了文字。點(diǎn)擊按鈕緩慢回到頂部
    2014-04-04
  • 打印Proxy對(duì)象和ref對(duì)象的包實(shí)現(xiàn)詳解

    打印Proxy對(duì)象和ref對(duì)象的包實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了打印Proxy對(duì)象和ref對(duì)象的包實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Javascript遍歷table中的元素示例代碼

    Javascript遍歷table中的元素示例代碼

    這篇文章主要介紹了Javascript如何遍歷table中的元素,需要的朋友可以參考下
    2014-07-07
  • JS沙箱模式實(shí)例分析

    JS沙箱模式實(shí)例分析

    這篇文章主要介紹了JS沙箱模式,結(jié)合實(shí)例形式分析了JS沙箱模式的原理與實(shí)現(xiàn)方法,需要的朋友可以參考下
    2017-09-09
  • 基于postman獲取動(dòng)態(tài)數(shù)據(jù)過程詳解

    基于postman獲取動(dòng)態(tài)數(shù)據(jù)過程詳解

    這篇文章主要介紹了基于postman獲取動(dòng)態(tài)數(shù)據(jù)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • JavaScript數(shù)組中reduce方法的應(yīng)用詳解

    JavaScript數(shù)組中reduce方法的應(yīng)用詳解

    JavaScript 中的reduce()方法可以用于將數(shù)組元素匯總為單個(gè)值,,所以本文為大家整理了一些JavaScript數(shù)組中reduce方法的應(yīng)用,需要的可以參考一下
    2023-07-07
  • js前端加載超大圖片(100M以上)實(shí)現(xiàn)秒開的最佳解決方案

    js前端加載超大圖片(100M以上)實(shí)現(xiàn)秒開的最佳解決方案

    前端加載超大圖片時(shí),一般可以采取圖片壓縮,圖片分割,預(yù)加載等措施,而對(duì)于幾百M(fèi)或上G的大圖而言,不管對(duì)圖片進(jìn)行怎么優(yōu)化或加速處理,要實(shí)現(xiàn)秒開也是不太可能的事情,所以本文小編將給大家介紹如何對(duì)大圖進(jìn)行分割,在前端進(jìn)行拼接實(shí)現(xiàn)秒開,需要的朋友可以參考下
    2023-10-10
  • javascript之彈出窗口居中的代碼

    javascript之彈出窗口居中的代碼

    有時(shí)候我們?cè)诰W(wǎng)頁(yè)制作過程中需要彈出窗口,一般情況下,我們更希望窗口可以居中顯示
    2007-08-08
  • BootStrap的雙日歷時(shí)間控件使用

    BootStrap的雙日歷時(shí)間控件使用

    這段時(shí)間看了下bootstrap的時(shí)間控件,發(fā)現(xiàn)使用起來還是很簡(jiǎn)單的,趁著有時(shí)間的時(shí)候整理了一下,特此分享到腳本之家平臺(tái),感興趣的朋友參考下
    2017-07-07

最新評(píng)論