制作滚屏与翻页时分页加载的方法

最近在做土豆相册的项目,增加了一个缩略图菜单,那就要对缩略图进行分页显示了。
如果相册有很多图片的话,不可能一次对所有的缩略图进行加载,这就要面临如下两个问题了:

  1. 翻到这一页,才开始对这页中的缩略图进行加载;
  2. 每翻到一页,先要对这页进行判断,如果是已经加载过的页,就不重复执行加载操作。

所以我做了四个数组:
loadedPage :用来存入已经加载的页码
_thumArr :里面存着所有缩略图的url
ldArr :存入每一页的图片加载器
picnumArr :存入每一页的图片序号

主要解决的几个问题:
要求出每个分页的图片数:


//这里求出每一个分页的最大图片数。如果图片总数小于设置的每页图片数,那k等于图片总数
//如果图片总数大于设置的每页图片数,只在最后一页k等于图片总数除每页图片数的余,其它页k等于每页图片数
var k:Number;
if(_thumArr.length>pageNum){
	if(n == Math.ceil(_thumArr.length/pageNum)-1){
		k = _thumArr.length%pageNum;
	}else{
		k= pageNum;
	}
}else{
	k =_thumArr.length;
}

要得出加载的这个分页中的各图片序号,才能知道这些图片的url:


//启动此页中的图片加载器,求出各图片的url地址进行加载
//图片序号:pageNum*n+i
//图片url:_thumArr[pageNum*n+i]
for(var i:uint=0; i<k; i++){
	var ld:ImageLoader = new ImageLoader();
	ld.load(_thumArr[pageNum*n+i],lcontex);
	ld.addEventListener(Event.COMPLETE,loadedFun);
	......
}

最后我loaderPage的详细方法,传入的参数为当前翻到的页码

private function loaderPage(n:Number):void{
	//如果这个分页页码不在已完成加载的页码数组中
	//就将对这页的所有图片内容进行加载,否则就不重复执行加载操作了。
	if(loadedPage.indexOf(n) == -1){

		//ldArr数组用来保存图片加载器,picnumArr用来保存图片序号
		//每次到新的分页都需要清空这两个数组
		ldArr = new Array();
		picnumArr = new Array();

		//这里求出每一个分页的最大图片数。如果图片总数小于设置的每页图片数,那k等于图片总数
		//如果图片总数大于设置的每页图片数,只在最后一页k等于图片总数除每页图片数的余,其它页k等于每页图片数
		var k:Number;
		if(_thumArr.length>pageNum){
			if(n == Math.ceil(_thumArr.length/pageNum)-1){
				k = _thumArr.length%pageNum;
			}else{
				k= pageNum;
			}
		}else{
			k =_thumArr.length;
		}

		//启动此页中的图片加载器,求出各图片的url地址进行加载
		//图片序号:pageNum*n+i
		//图片url:_thumArr[pageNum*n+i]
		for(var i:uint=0; i<k; i++){
			var ld:ImageLoader = new ImageLoader();
			ld.load(_thumArr[pageNum*n+i],lcontex);
			ld.addEventListener(Event.COMPLETE,loadedFun);

			ldArr.push(ld);
			picnumArr.push(pageNum*n+i);
		}
		//已经完成加载的页码,加入完成加载页码数组
		loadedPage.push(n);
	}
}
猫抓鱼

Leave a Reply