图片延迟加载/图片懒加载的作用:保证页面打开的速度(3s之后如果首页打不开被称为死亡页面)
原理:
1>对于首屏内容中的图片:首先给对应的区域一张默认图片占着位置(默认图需要非常的小,一般可以维持在5kb以内)
当首屏内容都加载完成后(或者也可以给一个延迟的时间),再开始加载真实的图片
2>对于其它屏中的图片:也是给一张默认的图片占位,当滚动条滚动到对应区域的时候,我们再开始加载真实的图片
网站性能优化的几种方式:
尽量减少向服务器请求的次数(减少http请求)
css/js文件进行合并
icon图片也进行合并--->雪碧图
图片的延迟加载
数据的异步加载
在移动端,如果我做的是一个简单的宣传页,尽量的把css和js写好内嵌式
首屏延迟加载:
如果获取的图片地址是错误的当赋值给img的src属性的时候不仅控制台会报错,而且页面中会出现碎图或叉图,所以我们获取图片的地址之后要验证地址的有效性,是有效的才赋值,不是有效的是不进行赋值处理。
<div class="banner" id="banner">
<img src="" trueimg="img/jd1.jpg" alt=""/>
</div>
var banner = document.getElementById('banner');
var oimgFir = banner.getElementsByTagName('img')[0];
window.setTimeout(function () {
//创建一个临时的img标签
var oimg = new Image;
oimg.src = oimgFir.getAttribute("trueimg");
//当图片能够正常加载
oimg.onload = function () {
oimgFir.src = this.src;
oimgFir.style.display = 'block';
oimg = null;
};
}, 500);
其他屏单张图片延迟加载
<div class="con" id="con">
<img src="" trueimg="img/jd2fds.jpg" alt="" class="img2"/>
</div>
var con = document.getElementById('con');
var conimgFir = con.getElementsByTagName('img')[0];
window.onscroll = function () {
已经加载过了,避免重复加载
if (con.isLoad) {
return;
}
var scrolltop = (document.documentElement.scrollTop || document.body.scrollTop) + (document.documentElement.clientHeight || document.body.clientHeight);
var conscrolltop = con.offsetHeight + con.offsetTop;
if (scrolltop > conscrolltop) {
console.log('fsd');
var conimg = new Image;
conimg.src = conimgFir.getAttribute("trueimg");
conimg.onload = function () {
conimgFir.src = this.src;
conimgFir.style.display = 'block';
conimg = null;
};
不管是否正常加载,只要处理过一次以后都不处理
con.isLoad = true;
}
};
综合练习多张图片延迟加载:
Json文件在json/data.txt
html部分<ul id="news"></ul>
Js部分:
// 获取数据
var jsondata = null;
~function () {
var xhr = new XMLHttpRequest();
xhr.open("get", "json/data.txt", false);
xhr.onreadystatechange = function () {
if (xhr.readyState == 4 && /^2\d{2}$/.test(xhr.status)) {
jsondata = JSON.parse(xhr.responseText);
}
};
xhr.send();
}();
//绑定数据
~function () {
for (var i = 0; i < jsondata.length; i++) {
var oul = document.getElementById("news");
var ali = "<li>";
ali += "<div><img trueImg=" + jsondata[i].imgsrc + "></div>";
ali += "<div><h2>" + jsondata[i].title + "</h2><p>" + jsondata[i].pre + "</p></div>";
ali += "</li>";
oul.innerHTML += ali;
}
}();
// 懒加载
var ali = document.getElementsByTagName('li');
var oimg = document.getElementsByTagName('img');
function lay(cur) {
if (cur.isload) {
return;
}
var oimgFir = new Image;
oimgFir.src = cur.getAttribute("trueImg");
oimgFir.onload = function () {
cur.src = this.src;
cur.style.display = 'block';
oimgFir = null;
};
cur.isload = true;
}
function handle() {
for (var i = 0; i < oimg.length; i++) {
var curImg = oimg[i];
// 当前图片处理过的话就不需要重新进行处理了
if (curImg.isload) {
continue;
}
var curImgTop = ali[0].offsetHeight + curImg.parentNode.parentNode.offsetTop;
var scrolltop = (document.documentElement.clientHeight || document.body.clientHeight ) + (document.documentElement.scrollTop || document.body.scrollTop);
if (scrolltop > curImgTop) {
lay(curImg);
}
}
}
// 开始的时候过500s加载第一屏
window.setTimeout(handle, 500);
window.onscroll=handle;
第七节图片延迟加载
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- github 原文 https://github.com/Treri/me-lazyload me-lazyloa...
- 说在前面 最近由于项目需要所以学了下小程序,也做了一些东西,随后便有了以下的一些总结了,现在说说在小程序中如何进行...
- 如果一个网页很长并且有很多图片的话,下载图片就需要很多时间,那么就会影响整个网页的加载速度,而这款延迟加载插件,会...