• FLASH web 预加载技术(原创) [返回文章列表]     发表于: 2007-7-5  1468人(次)浏览
  • 转载请说明出处,否则定当追究!

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

FLASH web 预加载技术(原创) [返回文章列表]