所有分类
  • 所有分类
  • 后端开发
解决手机 H5 网页图片加载问题,提升用户体验的有效方法

解决手机 H5 网页图片加载问题,提升用户体验的有效方法

虽然这种加载效果占用了用户的浏览时间,但是我们可以把它做的好看有趣一点,所以也不会影响用户体验。本文实践了这种想法,提供一个非常简洁的图片预加载组件,实现简单,功能不弱,在做移动页面的时候应该对你有参考价值。更多利用简洁的图片预加载组件提升

一、引言:图片加载问题的普遍性与影响

做手机H5网页时,有些时候页面速度太快,图片却迟迟出不来,这种情况挺糟心的。虽然不怎么影响用,但对用户来说就是不爽。他们可能会因为这个急躁不安或者干脆走人。所以,我们得搞好图片加载,提高页面流畅度,这样才能给用户更好的体验!

二、图片预加载的概念与重要性

解决手机 H5 网页图片加载问题,提升用户体验的有效方法

啥叫图片预加载?简单来说,就是在我们想看网页之前,先把网页里所有要展示的图片下载完。这样一来,当你真的开始浏览网页时,图片早就准备好了,马上就能出现,给人感觉非常迅速!我个人认为,这不仅仅是个技术问题,更是对大家的尊重和体贴关怀。因为有了预加载,你每次要浏览网页都会感受到最棒的视觉体验!

三、预加载组件的创建与应用

想让网页上出现的图片速度变快?来试试这个小技巧!先用JavaScript创建Image对象,给它指定好加载路径后,在页面还没完全显示之前就让它们提前开始加载。等到所有图片都加载完之后,再展示整个页面。这样一来,当你打开网页时,就能马上看到图片了,是不是很棒?

四、预加载进度的反馈与处理

以前我搞图片预加载的时候,就不知道咋才能准确地展示加载进度。本来想搞个已加载数据占总量的百分比,但浏览器不给力。后来换了个法子,就是看已经下好的文件数占总文件数的比例,这招简单又好用,让用户随时都能知道图片加载到哪儿了。

五、处理图片加载失败的情况

用着用着发现图片老加载不出,这可不行,太影响阅读体验了。所以给每张图设了个限制,超过时间还没加载完,就让网页先出主内容。这样一来,就算图片出错,对浏览网页的影响也不会太大!

(function () {    
function isArray(obj) {    
return Object.prototype.toString.call(obj) === '[object Array]';    
}    
/**   
* @param imgList 要加载的图片地址列表,['aa/asd.png','aa/xxx.png']   
* @param callback 每成功加载一个图片之后的回调,并传入“已加载的图片总数/要加载的图片总数”表示进度   
* @param timeout 每个图片加载的超时时间,默认为5s   
*/    
var loader = function (imgList, callback, timeout) {    
timeout = timeout || 5000;    
imgList = isArray(imgList) && imgList || [];    
callback = typeof(callback) === 'function' && callback;    
var total = imgList.length,    
loaded = 0,    
imgages = [],    
_on = function () {    
loaded < total && (++loaded, callback && callback(loaded / total));    
};    
if (!total) {    
return callback && callback(1);    
}    
for (var i = 0; i < total; i++) {    
imgages[i] = new Image();    
imgages[i].onload = imgages[i].onerror = _on;    
imgages[i].src = imgList[i];    
}    
/**   
* 如果timeout * total时间范围内,仍有图片未加载出来(判断条件是loaded < total),通知外部环境所有图片均已加载   
* 目的是避免用户等待时间过长   
*/    
setTimeout(function () {    
loaded < total && (loaded = total, callback && callback(loaded / total));    
}, timeout * total);    
};    
"function" === typeof define && define.cmd ? define(function () {    
return loader    
}) : window.imgLoader = loader;    
})();

六、预加载效果的展示与优化

    
    
imgLoader(['../img/page1.jpg', '../img/page2.jpg', '../img/page3.jpg'], function(percentage){    
console.log(percentage)    
});    

我那演示工程里面用了超大图,但因为是本地的,加载速度快得看不出来预加载。所以,我就在每个进度节点前面加了点时间让它慢慢加载,这样大家打开网页就知道在加载什么了,也能体验到预加载的流畅感咯。

七、预加载技术的扩展应用

解决手机 H5 网页图片加载问题,提升用户体验的有效方法

除了图片,我还想试试看预加载其他像音视频这类资源!它们的DOM对象跟Image类似,预加载肯定行得通。这样不仅让用户体验更棒,对于手机网页开发来说,也多了很多新花样。

八、与懒加载技术的对比思考

    
    
    
    

你听过预加载?今天咱来聊聊懒加载!全球都有懒加载插件可用,但其实学会怎么搞懂原理更有趣。懒加载能让初次访问网页速度变快,尤其是大图或内容多的情况。将来,我打算再研究下懒加载在手机上的表现如何。

总结:

我自己试过很多次,发现给图片提前加载真的能大大提高H5移动页的流畅度。这样网页就能秒开,用户看起来也更爽快。以后我还会继续研究预加载技术在别的地方有什么用,大家也可以来说说你们的想法和建议哈。那你觉得图片预加载好不好?赶紧来评论区聊聊!别忘了点个赞分享出去,让更多人加入我们这个有趣的话题讨论。

//模拟加载慢的效果    
var callbacks = [];    
imgLoader(['img/page1.jpg', 'img/page2.jpg', 'img/page3.jpg'], function (percentage) {    
var i = callbacks.length;    
callbacks.push(function(){    
setTimeout(function(){    
var percentT = percentage * 100;    
$('#loader__info').html('Loading ' + (parseInt(percentT)) + '%');    
$('#loader__progress')[0].style.width = percentT + '%';    
if (percentage == 1) {    
setTimeout(function(){    
$('#loader').remove();    
Swipe.init();    
}, 600);    
}    
callbacks[i + 1] && callbacks[i + 1]();    
},600);    
});    
if(percentage == 1) {    
callbacks[0]();    
}    
});

原文链接:https://www.icz.com/technicalinformation/web/javascript/2024/06/16948.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?