FLASH web 预加载技术(原创)

 

转载请说明出处,否则定当追究!

/*
今天下午比较有空一点,完成了一个项目,因此写点东西.这是一个预加载的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>
*/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值