Gestionnaire de chargement, classe abstraite.
Classes recquises:
Visibilité | Type | Nom | Status | Description |
---|---|---|---|---|
public | Number | bytesLoaded | Lecture seule | Les bytes chargés |
public | Number | bytesTotal | Lecture seule | Les bytes totaux |
public | String | url | Lecture seule | L'url à charger |
public | MovieClip | content | Lecture seule | L'instance du contenu chargé |
public | Number | timeout | Le nombre de millisecondes qui correspond au timeout | |
public | MovieClip | targetInstance | L'instance de la cible (différent du contenu, mais ca peut être le même) |
Visibilité | Return | Nom | Param 1 | Description |
---|---|---|---|---|
public | Void | load | pUrl:String | Charge une URL |
Nom | Param 1 | Param 2 | Description |
---|---|---|---|
onLoad | Evénement invoqué lorsqu'un chargement est terminé. | ||
onLoading | pBytesLoaded:Number | pBytesTotal:Number | Evénement invoqué pendant un chargement. |
onFileNotFound | pUrl:String | Evénement invoqué lorsque le fichier à charger n'a pas été trouvé. | |
onTimeOut | pUrl:String | Evénement invoqué lorsqu'un chargement fait un timeout. | |
onNoTarget | Evénement invoqué lorsque la cible du chargement disparait. |
Création
Mémorisation de l'url pour un affichage
Ajout d'une nouvelle condition pour le chargement : Si la cible disparait ⇒ Il n'y a plus de chargement, on invoque l'événement onNoTarget
Problème avec un attachMovie : j'ai ajoué un autre test pour le indicLoad, si VARloader.initBytes > 64
J'espère que ca ne va pas affecter d'autres trucs …
Modification de la méthode _loadingEnterFrame, je teste le _currentframe
import com.neolao.LogManager; import com.neolao.controls.EnterFrame; /** * Gestionnaire de chargement, classe abstraite * @author neolao <neo@neolao.com> * @version 1.4 (12/10/2005) * @link http://resources.neolao.com/flash/classes/controls/LoadManager * @license http://creativecommons.org/licenses/by-sa/2.5/ */ dynamic class com.neolao.controls.LoadManager { public var className:String = "LoadManager"; public var version:String = "1.4"; // ----------------------------- CONSTANTES -------------------------------- /** * Le timeout par defaut s'il n'est pas specifie */ private var DEFAULT_TIMEOUT:Number = 20000; /** * Le temps de verification du 404 */ private var DEFAULT_NOTFOUND:Number = 5000; // ----------------------------- VARIABLES --------------------------------- /** * Objet qui va mémoriser des données concernant le chargement * On l'utilise aussi comme objet de base pour le EnterFrame */ private var _loader:Object; /** * La cible de la class */ private var _target:MovieClip; /** * L'instance du contenu */ private var _content:MovieClip; /** * Le nombre de millisecondes qui correspond au timeout */ private var _timeout:Number; /** * L'url à charger */ private var _url:String; /** * logs */ private var _log:LogManager; /** * L'instance de la class instanciant LoadManager */ public var _parentClass:Object; // ----------------------------- EVENEMENTS -------------------------------- /** * Evénement invoqué lorsqu'un chargement est terminé */ public var onLoad:Function; /** * Evénement invoqué pendant un chargement * @param pBytesLoaded Le nombre de bytes chargés * @param pBytesTotal Le nombre de bytes total */ public var onLoading:Function; /** * Evénement invoqué lorsque le fichier à charger n'a pas été trouvé * @param pUrl L'url du fichier */ public var onFileNotFound:Function; /** * Evénement invoqué lorsqu'un chargement fait un timeout * @param pUrl L'url du fichier */ public var onTimeOut:Function; /** * Evénement invoqué lorsque la cible du chargement disparait */ public var onNoTarget:Function; /*============================= CONSTRUCTEUR =============================*/ /*========================================================================*/ /** * Initialisation */ private function LoadManager(){ _log = new LogManager("LoadManager"); // Initialisation de la class EnterFrame EnterFrame.init(); _loader = new Object(); } /*======================= FIN = CONSTRUCTEUR = FIN =======================*/ /*========================================================================*/ /*=========================== METHODES PRIVEES ===========================*/ /*========================================================================*/ /** * Méthode utilisé dans EnterFrame pour tester tout ce qu'il y a à tester */ private function _loadingEnterFrame(){ var vBytesLoaded:Number = bytesLoaded; var vBytesTotal:Number = bytesTotal; var vEndDownload:Boolean = false; // Invoque l'evenement onLoading // Envoi des parametres bytes loade et byte total _onLoading(vBytesLoaded, vBytesTotal); _log.setAction("onLoading : " + vBytesLoaded + " / " + vBytesTotal + " ("+_content+")", 2); if(vBytesTotal > _loader.initBytes || _loader.initBytes > 64){ // Il y a un chargement _loader.indicLoad = true _log.setInfo("Il y a un chargement", 3); } if(_loader.lastBytesLoaded != vBytesLoaded){ // Les bytesLoaded sont differents _loader.stopLoadTime = getTimer(); } _loader.lastBytesLoaded = vBytesLoaded; // --------------------------------------------- onNoTarget if(vBytesLoaded == undefined && vBytesTotal == undefined){ _log.error = "La cible a disparu !"; _onNoTarget(); vEndDownload = true; } // --------------------------------------------- onLoad if(!vEndDownload && _loader.indicLoad){ // Le chargement s'effectue if(vBytesLoaded == vBytesTotal && vBytesLoaded > 2 && content._currentframe > 0){ // Le loading est termine _log.info = "Chargement terminé ! (" + _url + ")"; // Invoque l'evenement onLoad _onLoad(); // Le chargement doit s'arrêter vEndDownload = true; } } // --------------------------------------------- onFileNotFound if(!vEndDownload && (vBytesTotal < 0 || vBytesTotal == _loader.initBytes) && (getTimer() - _loader.startTime > DEFAULT_NOTFOUND)){ // Aucun fichier trouve _log.error = "File not found ! (" + _url + ")"; // Invoque l'evenement onFileNotFound _onFileNotFound(_url); // Le chargement doit s'arrêter vEndDownload = true; } // --------------------------------------------- onTimeOut if(!vEndDownload && _loader.indicLoad && getTimer() - _loader.stopLoadTime > timeout){ // Le chargement ne se fait plus depuis un certain temps defini // Il y a time out _log.error = "Timeout ! (" + _url + ")"; // Invoque l'evenement onTimeOut _onTimeOut(_url); // Le chargement doit s'arrêter vEndDownload = true; } if(vEndDownload){ // Le chargement s'arrête pour un événement quelconque // Supprime le enterFrame du loading EnterFrame.removeListener(this); } } /** * Méthode du onLoad */ private function _onLoad(){ this.onLoad.apply(this, arguments); } /** * Méthode du onLoading */ private function _onLoading(){ this.onLoading.apply(this, arguments); } /** * Méthode du onFileNotFound */ private function _onFileNotFound(){ this.onFileNotFound.apply(this, arguments); } /** * Méthode du onTimeOut */ private function _onTimeOut(){ this.onTimeOut.apply(this, arguments); } /** * Méthode du onNoTarget */ private function _onNoTarget(){ this.onNoTarget.apply(this, arguments); } /*===================== FIN = METHODES PRIVEES = FIN =====================*/ /*========================================================================*/ /*============================ GETTER SETTER ============================*/ /*========================================================================*/ /** * Les bytes chargés * Il faut surcharger ca */ public function get bytesLoaded():Number{ return -1; } /** * Les bytes totaux * Il faut surcharger ca */ public function get bytesTotal():Number{ return -1; } /** * Le nombre de millisecondes qui correspond au timeout */ public function set timeout(pTimeout:Number){ _timeout = pTimeout; } public function get timeout():Number{ var vTimeout:Number = DEFAULT_TIMEOUT; if(_timeout != undefined){ vTimeout = _timeout; } return vTimeout; } /** * L'instance de la cible (différent du contenu, mais ca peut être le même) */ public function set targetInstance(pTarget:MovieClip){ _target = pTarget; } public function get targetInstance():MovieClip{ return _target; } /** * L'url à charger */ public function get url():String{ return _url; } /** * L'instance du contenu chargé */ public function get content():MovieClip{ return _content; } /*====================== FIN = GETTER SETTER = FIN ======================*/ /*========================================================================*/ /*========================== METHODES PUBLIQUES ==========================*/ /*========================================================================*/ /** * Lance le chargement * @param pUrl Une url ou un symbole lié */ public function load(pUrl:String){ _url = pUrl; _log.action = "load : Chargement de \"" + pUrl + "\""; // On enregistre le temps de depart du load _loader.startTime = getTimer(); // On memorise le temps du dernier arret de loading _loader.stopLoadTime = getTimer(); // On enregistre la taille du clipLoader avant le chargement // Ca va servir pour le chargement, pour savoir s'il y en a un justement _loader.initBytes = (bytesTotal != -1)?bytesTotal:-1; // On affecte la fonction de chargement au EnterFrame EnterFrame.addListener(this, _loadingEnterFrame); } /*==================== FIN = METHODES PUBLIQUES = FIN ====================*/ /*========================================================================*/ }