h5开发常用
(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(imgs, function(percentage){
console.log(parseInt(percentage*100)+'%');
});