js图片预加载

// 获取文件名称后缀 、不带后缀
function getFilePath(filePath){
    var path = [];
    var pos = filePath.lastIndexOf('.');
    path['fileExt'] = filePath.substring(pos);   //获取后缀
    path['fileName'] = filePath.substring(0,pos);//获取文件名,不带后缀
    return path;
}

//实现一系列图片的预加载
//参数sources:图片信息关联数组
//参数callback:回调函数——图片预加载完成后立即执行此函数。
function preloadImages(sources,callback){   
    var newimages=[], 
        loadedimages=0;
    var sources = (typeof sources!="object")? [sources] : sources;
    function imageloadpost(){
        loadedimages++;
        if (loadedimages == sources.length){
            callback && callback(newimages);
        }
    }
    for (var i=0; i<sources.length; i++){
        newimages[i] = new Image();
        newimages[i].onload=function(){
            imageloadpost();
        };
        newimages[i].onerror=function(){
            imageloadpost();
        };
        newimages[i].src = sources[i];
    };
}

function LoadImages(opts){
    this.isFirst = true;
    this.currPage = 1;
    this.pageNum = opts.pageNum;
    this.imgData = {
        currPage:null,
        prevPage:null,
        nextPage:null
    };
}
LoadImages.prototype.init = function(){//初始化
    this.loadData(1,0);
};
LoadImages.prototype.goTo = function(toType){
    var _self = this;
    if(toType == 1){//下一页
        _self.imgData.prevPage = _self.imgData.currPage;
        _self.imgData.currPage = _self.imgData.nextPage;
        _self.currPage++;
        _self.showImg(1);
    }else if(toType == -1){//上一页
        _self.imgData.nextPage = _self.imgData.currPage;
        _self.imgData.currPage = _self.imgData.prevPage;
        _self.currPage--;
        _self.showImg(-1);
    }
};
LoadImages.prototype.showImg = function(showType){//显示图片
    var _self = this;
    var data = _self.imgData.currPage;
    if(_self.currPage == 1){
        $(".picwarp span.pre").addClass('hide');
    }else{
        $(".picwarp span.pre").removeClass('hide');//隐藏上一页按钮
    }
    if(data.num <= _self.pageNum*_self.currPage){
        $(".picwarp span.next").addClass('hide');
    }else{
        $(".picwarp span.next").removeClass('hide');//隐藏下一页按钮
        if(showType == 1 && ((_self.currPage+1) <= Math.ceil(data.num/_self.pageNum))){
            this.loadData(_self.currPage+1,1);
        }else if(showType == -1 && _self.currPage-1 >= 1){
            this.loadData(_self.currPage-1,-1);
        }
    }
    var list = data.urls;
    var curdd = null;
    var currPath = null; 
    for(var i=0;i<35 && i<list.length && i<_self.pageNum;i++){//遍历图片并显示
        currPath = getFilePath(list[i][0]);
        curdd = $('.moreImg dd:eq('+i+')');
        curdd.find('a').attr('href',list[i][0]);
        curdd.find('img').attr('src',currPath['fileName']+'s'+currPath['fileExt']);
    }
};
LoadImages.prototype.preLoadImg = function(list,callback){//预加载图片
    var currPath = null; 
    var imgageArr = [];
    for(var i=0;i<list.length;i++){
        imgageArr.push(list[i][0]);
        currPath = getFilePath(list[i][0]);
        imgageArr.push(currPath['fileName']+'s'+currPath['fileExt']);
    }
    preloadImages(imgageArr,callback);
};
LoadImages.prototype.loadData = function(pageIdx,loadType){//加载图片
    var _self = this;
    $.ajax({
        type : 'POST',
        url : xxx.getPageImgList,
        data : {
            pageNum:_self.pageNum,
            currentPage:pageIdx
        },
        dataType : 'json',
        success : function(data){
            if(loadType == 0){
                _self.imgData.currPage = data;
                _self.preLoadImg(data.urls,_self.showImg(1));
            }else if(loadType == 1){
                _self.imgData.nextPage = data;
                _self.preLoadImg(data.urls);
            }else if(loadType == -1){
                _self.imgData.prevPage = data;
                _self.preLoadImg(data.urls);
            }
        }
    });
};
//创建实例
var loadImgPage = null;
    loadImgPage = new LoadImages({pageNum:35});
原文地址:https://www.cnblogs.com/flowers-yang/p/4283118.html