图片预加载5

前面已经实现了图片的有序预加载


本例通之前一样,将有序预加载功能添加到Perload插件中,方面使用

在Perload增加默认选择属性choose

Perload.DEFULATS={
		choose:'oredered',
		each:null,//每张图片加载完后执行
		all:null//所有图片加载完后执行
	}
再创建图片有序预加载的方法
Perload.prototype._oredered=function(){
		var imgs=this.imgs;
		var len=imgs.length;
		var count=0;
		var opts=this.opts;
		
		load();
			//有序预加载
			function load() {
				var imgObj=new Image()
				$(imgObj).on('load error',function(){
					opts.each&&opts.each()
					if(count>=len){
						//图片已经加载完毕
						opts.all&&opts.all()
					}else{
						load()
					}
					document.title='1'+'/'+len
					count++;
				})
				imgObj.src=imgurls[count];
			}
	}
最后使用该插件

$.perload(imgurls,{
				choose:'oredered',
			})
完整Perload.js

(function($){
	//构造函数,必须与文件名一致
	function Perload(imgs,options){
		//如果传过来的值是字符串,则将其包成数组,否则说明传过来的是数组,不用包
		this.imgs=(typeof imgs==='string')?[imgs]:imgs;
		//将右边两个对象融合(最右边的对象覆盖中间的对象),生成新的对象
		this.opts=$.extend({}, Perload.DEFULATS, options);
		if(this.opts.choose==='oredered'){
			//有序加载
			this._oredered();
		}else{
			//无序加载
			//加下划线,只限于内部调用
		this._unoredered();
			
		}
		
	}
	Perload.DEFULATS={
		choose:'oredered',
		each:null,//每张图片加载完后执行
		all:null//所有图片加载完后执行
	}
	//写在原型链上,使对象实例化时保持一份
	Perload.prototype._unoredered=function(){//无序加载
			var imgs=this.imgs;
			var	opts=this.opts;
			var count=0;
			var len=imgs.length;
			$.each(imgs, function(i,src) {
				//如果不是字符串,则跳出
				if(typeof src !='string' ) return;
				var imgObj=new Image()
				$(imgObj).on('load error',function(){
					//如果前边的optes.each不为null,则执行后面的方法
					opts.each&&opts.each(count);
					if(count>=len-1){//加载完毕后隐藏
						//如果前边的optes.all不为null,则执行后面的方法
						opts.all&&opts.all();
					}
					document.title='1'+'/'+len
					count++;
				})
				imgObj.src=src;
			});
	}
	Perload.prototype._oredered=function(){
		var imgs=this.imgs;
		var len=imgs.length;
		var count=0;
		var opts=this.opts;
		
		load();
			//有序预加载
			function load() {
				var imgObj=new Image()
				$(imgObj).on('load error',function(){
					opts.each&&opts.each()
					if(count>=len){
						//图片已经加载完毕
						opts.all&&opts.all()
					}else{
						load()
					}
					document.title='1'+'/'+len
					count++;
				})
				imgObj.src=imgurls[count];
			}
	}
	$.extend({
		perload:function(imgs,opts){
			new Perload(imgs,opts)
		}
	});
})(jQuery)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值