国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

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

2019-11-21 00:33:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

實(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的來(lái)替換(加載圖片)

代碼

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來(lái)查看一時(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");

});

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 崇明县| 青铜峡市| 浦东新区| 宜章县| 深水埗区| 施秉县| 湘阴县| 霍州市| 万荣县| 平阴县| 平山县| 红河县| 万宁市| 林口县| 金寨县| 田林县| 安徽省| 阿合奇县| 洛扎县| 鄂托克前旗| 江陵县| 韩城市| 彝良县| 屏边| 嘉善县| 隆回县| 双柏县| 稻城县| 揭阳市| 玛纳斯县| 陇南市| 惠水县| 阳江市| 桐城市| 桦甸市| 棋牌| 天气| 溧阳市| 洛阳市| 墨脱县| 八宿县|