问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

一段实现页面上的图片延时加载的js代码

发布网友 发布时间:2023-07-13 19:57

我来回答

1个回答

热心网友 时间:2023-09-17 05:14

相关地址:
http://list.taobao.com/browse/30-50029375/n-1----------------------0---------yes-------g,ge3denzxhazmzsgy3tsnzq-----------------------42-grid-commend-0-all-50029375.htm?TBG=14153.14.7&ssid=r18-s18
http://shop.qq.com/shopList.html
大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较长的页面来说,这个方案是比较好的。
实现原理
把所有需要延时加载的图片改成如下的格式:
<img
lazy_src="图片路径"
border="0"/>
然后在页面加载时,把所有使用了lazy_src的图片都保存到数组里,然后在滚动时计算可视区域的top,然后把延时加载的图片中top小于当前可视区域(即图片出现在可视区域内)的图片的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
=
[];
//从所有相关元素中找出需要延时加载的元素
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);//得到图片相对document的距上距离
if
(map_element[t_index])
{
map_element[t_index].push(i);
}
else
{
//按距上距离保存一个队列
var
t_array
=
[];
t_array[0]
=
i;
map_element[t_index]
=
t_array;
download_count++;//需要延时加载的图片数量
}
}
};
function
initDownloadListen()
{
if
(!download_count)
return;
var
offset
=
(window.MessageEvent
&&
!document.getBoxObjectFor)
?
doc_body.scrollTop:
doc_element.scrollTop;
//可视化区域的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
}
})();
使用方法:把页面上需要延时加载的图片src改成为lazy_src,然后把上面的js放到body最后面,然后调用:lazyLoad.init();
调戏的方法可以使用firebug来查看一时图片是否是延时加载。
另外:
如果你的页面上存在有内容切换的栏目的话,可能在切换时切换的内容里的图片可能会不显示,处理的方法是在内容时单独图片加载处理,如:
复制代码
代码如下:
///切换内容的代码...
chlid.find("img[init_src]").each(function(){
$(this).attr("src",$(this).attr("init_src"));
$(this).removeAttr("init_src");
});
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
大学入学应该带哪些必备物品? tim删除聊天记录的方法步骤 pc端彻底删除tim聊天记录 甩脂机调到什么档位 如何用甩脂机 甩脂机的正确使用方法 使用抖脂机要注意什么 怎样申请小号微信号 ...的长和宽分别增加6米,扩建后草坪的面积增加了多少 ...扩建后长和宽分别增加10米,扩建后的操场面积增加了多少平方米?_百 ... 长方形的公园它的面积长和宽分别扩大十米后它的平方增加了面积增加了13... 请帮我找100道六年级计算题,过程,答案都写清楚,题目不要太难,谢谢! 整数简便脱式计算题 帮我找100道脱式简便计算 谁给我100道简便运算的题目 去通州绿心森林公园座819公交车能到吗? 珠海有舞蹈学校吗? 珠海哪里有跳莎莎舞的地方 珠海哪里可以学三步踩舞蹈 怎么辨别苹果touch的型号 a1574touch几代 智商数108,智力百分等级63正常吗 智商108是否聪明呢? 三星s8用久了会卡吗 大学生进入社会把关系处烂的9个行为 温杭东的简历 金乡县杨恭圣在济宁哪里任职 原来在你生命里出现的人,都有原因的 隆家轩这名字好吗? 早上喝红牛可以吗 红牛的功效 一面溜开的拼音是什么? 溜开的拼音 什么字多一笔可以管千军万马,少一笔只能管几十个人? ?各位大仙,本人想发表一篇博士论文,想在国际三大检索的期刊中(SSCI,SCI,EI),经管类哪些期刊相对好发 发表EI期刊很牛吗 13岁的女生,喜欢唱歌。变声期没好好保护,最近几个月嗓子都哑哑的,有什么补救和保护的方法吗? 郭采洁黑色look现身机场,西装穿搭推大号行李箱抢眼,她的衣品如何? 宋茜低调似路人,拉着“透明行李箱”只装卫生纸,还是你会玩 文学诗性存在主要体现在那些地方 谈谈文学诗性存在主要体现在那些地方有哪些特点 谈一谈文学的诗性存在主要体现在哪些地方? 《回忆鲁迅先生》这篇文章的“史传性”和“文学性”体现在哪里? want单三是什么 哪些东西是宝妈最需要的啊? k4227列车时刻表 唐河县到南阳市多少公里 喝盐水有什么好处呀? 拉肚子喝盐水有效吗? 吃东西杂肚子难受有没有简单的处理方法? 新车越开越费油怎么办 为什么新车越跑越费油 正常人的基因一定没有缺失吗