转载请说明出处,否则定当追究!
/*
今天下午比较有空一点,完成了一个项目,因此写点东西.这是一个预加载的AS.目的就是加快FLASH网站的浏览速度.
需要提示的是:以下提到的XML可以根据自己的情况由后台动态生成也可以手工写.自己灵活把握.将会让你的网站飞跃一个台阶.
FLASH网站可以比普通网站拥有更快的浏览速度,基本不需要等待.
实际案例参考地址:[url]http://www2.xilinmen.com.cn/tt/flash/index.html[/url]
你会发现所有的栏目和内容产品图片的展示都很流畅(网络太慢的可能还是需要些微等待)
*/
//以下是源代码. preload.as
/*
声明:你可以使用此段代码,但请保留星号内所有信息
版本信息:1.1 作者:刘毅[道格瑞恩] 技术交流:QQ14238910 MSN:luckliuyi@163.com
更新内容:增加了对产品图片等网站内容的预加载,修正了下载过程中出现错误内容立即终止为跳过继续下载
制作日期:2007-6-30 以往版本信息:1.0
使用方法:
使用之前先手工制作一份下载内容的XML清单,也可以用后台生成XML,由此函数来调用.
并给出路径:
main_path="***.xml"//主要栏目
pre_content="***.xml"//其他详细内容
在AS 中插入此段代码,在下载栏目或者产品图片等资源时,用gl_load(target, box, loader:MovieClipLoader)函数.
开始执行后台加载:xml_load(load_xml, main_path);这个可以根据自己需要自己看情况放在你的代码里,一般是主框架下载完后.
函数参数说明:
{
target:要下载的目标
box:装载下载目标的容器电影剪辑
loader:用户自己使用的装载侦听器
}
例:
最开始加入
#include "preload.as"
main_path="***.xml"
pre_content="****.xml"
调用时加入
_btn.onPress=function(){
gl_load(path, showbox, preloader_all);
}
开始执行后台加载:xml_load(load_xml, main_path);
原理:利用浏览时的内存缓存和临时文件夹缓存,来达到预先下载的目的.
首先,M:swf被A:swf容器在下载完毕后,如果B:swf再次调用M,那么B将直接调用浏览缓存内的临时文件。
另外,当M下载到一半时,若终止M的加载,而加载另外一个N:swf,M已经被加载的部分并不会及时在内存中删除掉,而是会保留一段时间.
当N加载完毕后,继续返回调用M,则M将从已经加载完部分开始继续加载,而不是从0开始加载.
*/
//---------变量定义[所有全部不需要修改]------------------
System.useCodepage = true;
var load_xml:XML = new XML();
load_xml.ignoreWhite = true;
var depth:Number = 9999;
//加载器所在深度控制
var main_path:String = "";
// 主栏目下载的XML列表
var main_array:Array = new Array();
//主要栏目的信息储存信息
var main_count = 0;
//主要栏目的数目
var nowLoad = 1;
//当前下载的栏目
var loading_url = "";
//正在被下载的栏目的地址
var loading_st = false;
//栏目是否已经开始下载
_global.gl_url = "";
//用户正在下载的栏目路径
_global.gl_box;
//用户正用来下载的容器电影剪辑
var pre_content = "";
//网站内容下载清单XML路径
var pre_content_fst = true;
//---------变量定义end-----------------
//----------侦听器定义---------------------
var preld_check:Object = new Object();
preld_check.onLoadInit = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
nowLoad++;
preloader.unloadClip(target);
loading_st = false;
};
preld_check.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
target.show_loaded = bytesLoaded;
target.show_allLoad = bytesTotal;
target.stop();
target._visible = false;
eval("T"+nowLoad).text = target.show_loaded+"/"+target.show_allLoad;
};
preld_check.onLoadError = function() {
nowLoad++;
preloader.unloadClip(target);
loading_st = false;
};
var preloader:MovieClipLoader = new MovieClipLoader();
preloader.addListener(preld_check);
//----------侦听器定义end---------------------
//---------函数定义------------------
function xml_load(target:XML, path:String) {
//XML文件的下载函数
init_num();
//初始化
target.load(path);
checkProgress = function (xmlObj:XML) {
//XML下载进度检测
var bytesLoaded:Number = xmlObj.getBytesLoaded();
var bytesTotal:Number = xmlObj.getBytesTotal();
var percentLoaded:Number = Math.floor((bytesLoaded/bytesTotal)*100);
//trace("milliseconds elapsed: "+getTimer());
//trace("bytesLoaded: "+bytesLoaded);
//trace("bytesTotal: "+bytesTotal);
//trace("percent loaded: "+percentLoaded);
//trace("---------------------------------");
};
target.onLoad = function(success:Boolean) {
if (success) {
clearInterval(intervalID);
//switch (path) {
//case main_path :
mc_creat(target);
//break;
//}
} else {
}
};
var intervalID = setInterval(checkProgress, 50, target);
}
//end function
function box_creat(depth) {
//下载器总容器生成
var preload_mc = _root.createEmptyMovieClip("preload_mc", depth);
preload_mc._y = -200;
preload_mc._x = -200;
preload_mc._xscale = preload_mc._yscale=10;
}
//end function
function mc_creat(target:XML) {
//分容器生成
main_count = target.firstChild.childNodes.length;
for (i=1; i<=main_count; i++) {
var short_xml = target.firstChild.childNodes[i-1].attributes;
//preload_mc.createEmptyMovieClip("mc"+i, i);//用于多个同时下载模式
main_array.push({id:i, myname:String(short_xml.name), myurl:short_xml.mc_url, loaded:false});
if (i>=main_count) {
checkloadID = setInterval(checkload, 100);
}
}
}
//end function
function checkload() {
if (_global.gl_url != "") {
preloader.unloadClip(preload_mc);
loading_st = false;
//--------------
if (_global.gl_box.getBytesLoaded()/_global.gl_box.getBytesTotal()>=1) {
//判断正在被装载的目标的装载进度,如果装载完就设置装载的容器暂时为空,装载的目标地址为空
_global.gl_box = "";
_global.gl_url = "";
}
//--------------
} else {
if (loading_st == false) {
if (nowLoad>=main_count+1) {
//如果已经下载完成的栏目大于或等于总的栏目数
clearInterval(checkloadID);
//清除预先加载监测动画
if (pre_content != "" && pre_content_fst == true) {
//如果还有网站内容需要下载
pre_content_fst = false;
xml_load(load_xml, pre_content);
}
} else {
preloader.loadClip(main_array[Number(nowLoad-1)].myurl, preload_mc);
trace(main_array[Number(nowLoad-1)].myurl);
//卸载正在装载的目标
loading_url = main_array[Number(nowLoad-1)].myurl;
loading_st = true;
}
}
}
//end if
}
function gl_load(target, box, loader:MovieClipLoader) {
//下载时通用的函数,这样的话方便用户自定义装载侦听器
_global.gl_url = target;
_global.gl_box = box;
loader.loadClip(target, box);
}
function init_num() {
nowLoad = 1;
main_array.splice(0);
}
//***********************************预加载完**************************
box_creat(depth);
/*
XML格式:
<?xml version="1.0" encoding="gb2312"?>
<load_box name="网站整体结构加载清单" update="2007-6-12" author="dgs_liuyi">
<list name="关于我们" mc_url="brand.swf" />
<list name="产品中心" mc_url="product.swf" />
<list name="wallpaper" mc_url="wallpaper.swf" />
<list name="sale" mc_url="sale.swf" />
<list name="联系我们" mc_url="contact.swf" />
<list name="about" mc_url="about.swf" />
<list name="design" mc_url="design.swf" />
<list name="store" mc_url="store.swf" />
<list name="jpg" mc_url="1.jpg" />
<list name="jpg" mc_url="2.jpg" />
<list name="jpg" mc_url="3.jpg" />
</load_box>
*/