1.前言
懒加载技术(简称lazyload)并不是新技术, 它是js程序员对网页性能优化的一种方案.lazyload的核心是按需加载.在大型网站中都有lazyload的身影,例如谷歌的图片搜索页,迅雷首页,淘宝网,QQ空间等.因此掌握lazyload技术是个不错的选择,可惜jquery插件lazy load官网(http://www.appelsiini.net/projects/lazyload)称不支持新版浏览器。
2.lazyload在什么场合中应用比较合适?
涉及到图片,falsh资源 , iframe, 网页编辑器(类似FCK)等占用较大带宽,且这些模块暂且不在浏览器可视区内,因此可以使用lazyload在适当的时候加载该类资源.避免网页打开时加载过多资源,让用户等待太久.
3.如何实现lazyload?
lazyload的难点在如何在适当的时候加载用户需要的资源(这里用户需要的资源指该资源呈现在浏览器可视区域)。因此我们需要知道几点信息来确定目标是否已呈现在客户区,其中包括:
1.可视区域相对于浏览器顶端位置
2.待加载资源相对于浏览器顶端位置.
在得到以上两点数据后,通过如下函数,便可得出某对象是否在浏览器可视区域了.
复制代码 代码如下:
//返回浏览器的可视区域位置
function getClient(){
var l,t,w,h;
l = document.documentElement.scrollLeft || document.body.scrollLeft;
t = document.documentElement.scrollTop || document.body.scrollTop;
w = document.documentElement.clientWidth;
h = document.documentElement.clientHeight;
return {'left':l,'top':t,'width':w,'height':h} ;
}
//返回待加载资源位置
function getSubClient(p){
var l = 0,t = 0,w,h;
w = p.offsetWidth ;
h = p.offsetHeight;
while(p.offsetParent){
l += p.offsetLeft ;
t += p.offsetTop ;
p = p.offsetParent;
}
return {'left':l,'top':t,'width':w,'height':h } ;
}
其中 函数 getClient()返回浏览器客户区区域信息,getSubClient()返回目标模块区域信息。此时确定目标模块是否出现在客户区实际上是确定如上两个矩形是否相交.
复制代码 代码如下:
//判断两个矩形是否相交,返回一个布尔值
function intens(rec1,rec2){
var lc1,lc2,tc1,tc2,w1,h1;
lc1 = rec1.left + rec1.width / 2;
lc2 = rec2.left + rec2.width / 2;
tc1 = rec1.top + rec1.height / 2 ;
tc2 = rec2.top + rec2.height / 2 ;
w1 = (rec1.width + rec2.width) / 2 ;
h1 = (rec1.height + rec2.height) / 2;
return Math.abs(lc1 - lc2) < w1 && Math.abs(tc1 - tc2) < h1 ;
}
现在基本上可以实现延时加载了,接下来,我们在 window.onscroll 事件中编写一些代码监控目标区域是否呈现在客户区.
复制代码 代码如下:
<div style = "width:100px; height:3000px"></div>
<div id = "d1" style = "width:50px; height:50px; background:red;position:absolute; top:1000px">
</div>
var d1 = document.getElementById("d1");
window.onscroll = function(){
var prec1 = getClient();
var prec2 = getSubClient(d1);
if(intens(prec1,prec2)){
alert("true")
}
}
我们只需要在弹出窗口的地方加载我们需要的资源.
这里值得注意的是:目标对象呈现在客户区域时,会随着滚动而不断的弹出窗口.因此我们需要在弹出第一个窗口后取消对该区域的监测,这里用一个数组来收集需要监测的对象。还需要注意:因为onscroll事件和onresize事件都会改变游览器可视区域信息,因此在该类事件触发后需要重新计算目标对象是否在可视区域,这里用autocheck()函数实现.(迅雷首页的lazyload没有在onresize事件中重新计算目标对象是否在浏览器可视区域,因此如果先将浏览器窗口缩小到一定尺寸后滚动到需要加载图片的区域后点击最大化,图片加载不出来,呵呵,以后需要注意了).
增加元素:<div id = "d2" style = "width:50px; height:50px; background:blue;position:absolute; top:2500px">
复制代码 代码如下:
//比较某个子区域是否呈现在浏览器区域
function jiance(arr,prec1,callback){
var prec2;
for(var i = arr.length - 1 ; i >= 0 ;i--){
if(arr[i]){
prec2 = getSubClient(arr[i]);
if(intens(prec1,prec2)){
callback(arr[i]);
//加载资源后,删除监测
delete arr[i];
}
}
}
}
//检测目标对象是否出现在客户区
function autocheck(){
var prec1 = getClient();
jiance(arr,prec1,function(obj){
//加载资源...
alert(obj.innerHTML)
})
}
//子区域一
var d1 = document.getElementById("d1");
//子区域二
var d2 = document.getElementById("d2");
//需要按需加载区域集合
var arr = [d1,d2];
window.onscroll = function(){
//重新计算
autocheck();
}
window.onresize = function(){
//重新计算
autocheck();
}
现在我们只需要在弹窗的地方加载我们需要的资源了.源码就不贴出来了.如果需要的朋友,或着存在疑问的地方,可以联系我.
相关推荐:
优排软件:高效管理新天地,轻松提升工作效率,长葛外贸网站建设
ChatGPT目前,我无法查看或打开附件,但我依然能为你提供全面的帮助,苹果ai谷歌ai
ChatGPT点不了?背后的真相与解决方法,ai.520523
SEO走动:提升网站流量的关键一步,SEO数据监控宝宝推荐
OpenAI银联支付-未来支付新体验,安全便捷全新升级,医学加ai
ChatGPT恢复正常使用时间,提升你的工作与生活效率,联想电脑AI0510
未来智能:AI智能人工软件引领数字化变革
文字生成AI:开启创意写作的新纪元
《命运交错的轨迹:小说背后的无尽魅力》,seo优化huifachina
seo适合什么行业,seo适合的行业 ,在ai如何矢量化
seo相关知识是什么,seo相关技术 ,ai写作讯飞星火认知大模型
SEO可以帮助网站在搜索引擎中获得较高的排名-助力企业数字化转型的关键,赵立新AI换脸图片对比
ChatGPT模型进化历程:人工智能的智慧革命,ai 喷枪星空
颠覆写作方式:免费的AI续写软件助你轻松创作
为什么越来越多的人选择在知乎发布文章?这里面的机会你可能还没发现!,潍坊关键词排名提升
优化原理:提升效率、创新突破的核心法则,印刷包装推广有哪里网站
SEO运营是什么职业,seo运营工程师招聘 ,把ai图层改横幅
ChatGPT网页版内容显示不全的原因与解决方案,ai超级绘
SEO关键词利器:如何借助精准关键词提升网站流量与排名,ai绘画客户
“标题制造机”:颠覆内容创作的秘密武器,助你轻松打造吸引力十足的标题,景区线上推广用哪些网站
SEO与SEM策略:提升网站流量与品牌曝光的双剑合璧,ai补图
seo稿件是什么意思,seo文章写作要求 ,ai写作未来展望和展望
seo灰帽是什么,灰帽是指什么 ,ai绘画六边形
seo适合什么人做,哪种seo做得好 ,晋城ai论文写作免费
SEO在广告领域的深度解析:如何利用SEO提升广告效果,网文写作ai工具
SEO针对中小企业的增长潜力:如何通过精准优化抢占市场先机,网络推广和营销就选y火10星评价
SEO大神如何在激烈的互联网竞争中脱颖而出?,网页设计和网站建设试题
ChatGPT:引领人工智能对话新时代的智能助手,Ai shiang
优化提长:让企业效能提升的秘密武器,长沙网站建设创意
优化文字,让表达更精准:提升写作效率的关键,个人网站建设外包
SEO人工优化-让你的网页轻松登上搜索引擎首页,ai主母
SEO优化10种策略:提升网站排名的有效方法,帅气ai男头白底
如何选择适合你的AI工具?全面解析AI工具哪个好用
SEO每日:提高网站流量的秘密武器,助你脱颖而出,seo优化和排名技巧
SEO是什么意思?揭秘SEO的真正含义与重要性,公司推广网站询问d火18星来
优化标题:如何让你的文章更具吸引力与点击力,整站网站优化解决方案
seo需要学习什么语言,做seo需要懂什么技术 ,ai软件制作教程
SEO快速排名实例:如何通过实战技巧提升网站排名,快速突破流量瓶颈,安徽ai跑步机企业
Goanno跨级借鉴:推动创新与提升效率的秘密武器,崇明区智能ai艾灸费用
seo逻辑是什么,seo思路 ,语音主播怎么ai写作业
360ai问答-智能时代的全能助手,未来的智慧生活,ai生成白底
SEO站群:打造强大网络营销引擎,助力企业快速提升排名与流量,seo网站排名案例
AI智能工具的无限可能:未来已来,你准备好了吗?
在线AI写文:开启高效创作新时代
ChatGPT:打破语言障碍,理解与沟通的新时代,交通轨道ai
AI做文章:引领智能创作的未来
AI写作技巧,让创作事半功倍!
seo网站需要做什么,seo都需要做什么 ,ai怎么做喷漆效果
SEO小白必看!从零起步SEO的秘诀,轻松提升网站排名,南京网站运营优化平台
seo深度优化插件是什么,深度优化手机软件 ,ai的缩写