Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    332

    evento OnData al caricamento di immagini esterne

    Salve ragazzi,

    non riesco a far eseguire uno script al verificarsi dell'evento onData di un clip.

    Ho creato un clip vuoto nel quale con il metodo loadMovue devo caricare delle jpp.

    Vorrei che al completamento del caricamento di ogni immagine venisse eseguito uno script che regolasse la trasparenza creando un effetto dissolvenza.

    Questo è lo script:

    function test(){
    segnaposto_mc.loadMovie("path/img1.jpg");
    segnaposto_mc.onData = function() {
    this.onEnterFrame = function() {
    this._alpha -= 5;
    };
    };
    }

    E' possibile che non riesca a fare partire l'enterFrame??? Sbaglio qualcosa??

    Grazie a tutti
    "Studiare è questo.
    Improvvisamente si comprende qualcosa
    che si era capita da tutta la vita,
    ma da un nuovo punto di vista".

  2. #2
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    E' assolutamente normale, il filmato caricato nel movieclip cancella le variabili ad esso associate, compreso il gestore onData. Ci sono diversi trucchi per risolvere il bug, tipo:

    codice:
    ovieClip.prototype.addProperty("onLoad",
        function () {
            return MovieClip.onLoadList[this];
        },
        function (func) {
            if (MovieClip.onLoadList == undefined) {
                MovieClip.onLoadList = {};
            }
            MovieClip.onLoadList[this] = func;
        }
    );
    ASSetPropFlags(MovieClip.prototype, "onLoad", 1);
    
    //Test
    createEmptyMovieClip("foo", 1);
    createEmptyMovieClip("bar", 2);
    
    foo.onLoad = function() {
        trace("onLoad " + this + " : " + this._url);
        trace(this.createEmptyMovieClip("childMC", 1));
        this.onLoad = undefined;
    }
    bar.onLoad = foo.onLoad;
    bar.loadMovie("movie1.swf");
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    
    MovieClip.prototype.addOnLoadHandler = function(path, func) {
            if (MovieClip.__onLoadHandler__ == undefined) {
                    MovieClip.__onLoadHandler__ = {};
            }
            MovieClip.__onLoadHandler__[path] = func;
    };
    ASSetPropFlags(MovieClip, ["addOnLoadHandler"], 1);
    //
    sol = function (func) { addOnLoadHandler(this, func);};
    gol = function () { return MovieClip.__onLoadHandler__[this];};
    MovieClip.prototype.addProperty("onLoad", gol, sol);
    //
    //Test
    createEmptyMovieClip("hi", 1);
    function doOnLoad() { trace("onLoad " + this + ":" + this._url);}
    hi.onLoad = doOnLoad;
    hi.loadMovie("m1.swf");
    //
    // Test 2: Assign onLoad-Handler to clip on timeline
    addOnLoadHandler("_level0.test2.test", doOnLoad);
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    
    MCP = MovieClip.prototype;
    MCP.$LoadMovie = MCP.loadMovie;
    MCP.loadMovie = function ($url,$method){
      var i,o = {};
      for (i in this) {o[i] = this[i];}
      var v = Math.vRandom(36);
      this._parent[v] = function() {
        if ($d.m.getBytesLoaded()>4) {
          clearInterval($d.i);
          var j;
          for (j in $d.o) {$d.m[j] = $d.o[j];}
          if ($d.m.getBytesLoaded()==$d.m.getBytesTotal()) {$d.m.onload();}
          delete this[$d.v];
        }
      }
      var $d = {o:o, m:this.valueOf(), v:v, i:setInterval(this._parent,v,15)};
      this._parent[v].$d = $d;
      return this.$LoadMovie($url,$method);
    }
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    Movieclip.prototype.oldLoadMovie=Movieclip.prototype.loadMovie
    Movieclip.prototype.loadMovie=function(url,vars){
    	if(this.onData != undefined && this.onData != null){
    		this._parent.createEmptyMovieClip("__fixEvents",7777)
    		this._parent.__fixEvents.theTarget=this
    		this._parent.__fixEvents.onData=this.onData
    		if(this.onLoad != undefined && this.onLoad != null){
    			this._parent.__fixEvents.onLoad=this.onLoad
    		}
    		this._parent.__fixEvents.onEnterFrame=function(){
    			this.oldv=this.v
    			this.v=this.theTarget.getBytesLoaded()
    			if(this.v != this.oldv){
    				this.onData.call(this.theTarget)
    			}
    			if(this.v == this.theTarget.getBytesTotal()){
    				this.theTarget.onData=this.onData
    				if(this.onLoad != undefined){
    					this.theTarget.onLoad=this.onLoad
    				}
    				this.onLoad.call(this.theTarget)
    				this.removeMovieClip()
    			}
    		}
    	}
    	this.oldLoadMovie(url,vars)
    }
    
    /// TEST
    this.createEmptyMovieClip("tester",1)
    tester.onData=function(){
    	trace("hey")
    }
    tester.onLoad=function(){
    	trace("loaded")
    }
    tester.loadMovie("your.swf")
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    Se usi il flash mx 2, ti conviene utilizzare la classe MovieClipLoader..

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    332
    Originariamente inviato da negatyve
    E' assolutamente normale, il filmato caricato nel movieclip cancella le variabili ad esso associate, compreso il gestore onData. Ci sono diversi trucchi per risolvere il bug, tipo:

    codice:
    ovieClip.prototype.addProperty("onLoad",
        function () {
            return MovieClip.onLoadList[this];
        },
        function (func) {
            if (MovieClip.onLoadList == undefined) {
                MovieClip.onLoadList = {};
            }
            MovieClip.onLoadList[this] = func;
        }
    );
    ASSetPropFlags(MovieClip.prototype, "onLoad", 1);
    
    //Test
    createEmptyMovieClip("foo", 1);
    createEmptyMovieClip("bar", 2);
    
    foo.onLoad = function() {
        trace("onLoad " + this + " : " + this._url);
        trace(this.createEmptyMovieClip("childMC", 1));
        this.onLoad = undefined;
    }
    bar.onLoad = foo.onLoad;
    bar.loadMovie("movie1.swf");
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    
    MovieClip.prototype.addOnLoadHandler = function(path, func) {
            if (MovieClip.__onLoadHandler__ == undefined) {
                    MovieClip.__onLoadHandler__ = {};
            }
            MovieClip.__onLoadHandler__[path] = func;
    };
    ASSetPropFlags(MovieClip, ["addOnLoadHandler"], 1);
    //
    sol = function (func) { addOnLoadHandler(this, func);};
    gol = function () { return MovieClip.__onLoadHandler__[this];};
    MovieClip.prototype.addProperty("onLoad", gol, sol);
    //
    //Test
    createEmptyMovieClip("hi", 1);
    function doOnLoad() { trace("onLoad " + this + ":" + this._url);}
    hi.onLoad = doOnLoad;
    hi.loadMovie("m1.swf");
    //
    // Test 2: Assign onLoad-Handler to clip on timeline
    addOnLoadHandler("_level0.test2.test", doOnLoad);
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    
    MCP = MovieClip.prototype;
    MCP.$LoadMovie = MCP.loadMovie;
    MCP.loadMovie = function ($url,$method){
      var i,o = {};
      for (i in this) {o[i] = this[i];}
      var v = Math.vRandom(36);
      this._parent[v] = function() {
        if ($d.m.getBytesLoaded()>4) {
          clearInterval($d.i);
          var j;
          for (j in $d.o) {$d.m[j] = $d.o[j];}
          if ($d.m.getBytesLoaded()==$d.m.getBytesTotal()) {$d.m.onload();}
          delete this[$d.v];
        }
      }
      var $d = {o:o, m:this.valueOf(), v:v, i:setInterval(this._parent,v,15)};
      this._parent[v].$d = $d;
      return this.$LoadMovie($url,$method);
    }
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    Movieclip.prototype.oldLoadMovie=Movieclip.prototype.loadMovie
    Movieclip.prototype.loadMovie=function(url,vars){
    	if(this.onData != undefined && this.onData != null){
    		this._parent.createEmptyMovieClip("__fixEvents",7777)
    		this._parent.__fixEvents.theTarget=this
    		this._parent.__fixEvents.onData=this.onData
    		if(this.onLoad != undefined && this.onLoad != null){
    			this._parent.__fixEvents.onLoad=this.onLoad
    		}
    		this._parent.__fixEvents.onEnterFrame=function(){
    			this.oldv=this.v
    			this.v=this.theTarget.getBytesLoaded()
    			if(this.v != this.oldv){
    				this.onData.call(this.theTarget)
    			}
    			if(this.v == this.theTarget.getBytesTotal()){
    				this.theTarget.onData=this.onData
    				if(this.onLoad != undefined){
    					this.theTarget.onLoad=this.onLoad
    				}
    				this.onLoad.call(this.theTarget)
    				this.removeMovieClip()
    			}
    		}
    	}
    	this.oldLoadMovie(url,vars)
    }
    
    /// TEST
    this.createEmptyMovieClip("tester",1)
    tester.onData=function(){
    	trace("hey")
    }
    tester.onLoad=function(){
    	trace("loaded")
    }
    tester.loadMovie("your.swf")
    
    ----------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------
    Se usi il flash mx 2, ti conviene utilizzare la classe MovieClipLoader..
    Quindi sono 4 modi diversi per risolvere il bug? Grazie mille
    "Studiare è questo.
    Improvvisamente si comprende qualcosa
    che si era capita da tutta la vita,
    ma da un nuovo punto di vista".

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    332
    Ciao,

    ho fixato il bug di onData con l'ultimo modo che mi hai indicato, però mi spieghi per favore perchè non funzione l'enterFrame??

    this.createEmptyMovieClip("tester", 1);
    tester.onData = function() {
    trace("hey");
    this.onEnterFrame = function() {
    trace("OK");
    };
    };

    Grazie
    "Studiare è questo.
    Improvvisamente si comprende qualcosa
    che si era capita da tutta la vita,
    ma da un nuovo punto di vista".

  5. #5
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Non traccia "ok"? il codice completo che stai usando?

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    332
    Originariamente inviato da negatyve
    Non traccia "ok"? il codice completo che stai usando?
    Eccolo:

    codice:
    //Overriding di loadMovie per fixare il bug di onData
    Movieclip.prototype.oldLoadMovie = Movieclip.prototype.loadMovie;
    Movieclip.prototype.loadMovie = function(url, vars) {
    	if (this.onData != undefined && this.onData != null) {
    		this._parent.createEmptyMovieClip("__fixEvents", 7777);
    		this._parent.__fixEvents.theTarget = this;
    		this._parent.__fixEvents.onData = this.onData;
    		if (this.onLoad != undefined && this.onLoad != null) {
    			this._parent.__fixEvents.onLoad = this.onLoad;
    		}
    		this._parent.__fixEvents.onEnterFrame = function() {
    			this.oldv = this.v;
    			this.v = this.theTarget.getBytesLoaded();
    			if (this.v != this.oldv) {
    				this.onData.call(this.theTarget);
    			}
    			if (this.v == this.theTarget.getBytesTotal()) {
    				this.theTarget.onData = this.onData;
    				if (this.onLoad != undefined) {
    					this.theTarget.onLoad = this.onLoad;
    				}
    				this.onLoad.call(this.theTarget);
    				this.removeMovieClip();
    			}
    		};
    	}
    	this.oldLoadMovie(url, vars);
    };
    //Creazione del target e riposizionamento
    this.createEmptyMovieClip("tester", 1);
    //
    //Questa funzione carica le immagini nel clip target
    function loadImage(wichPic) {
    	this.alphaChange = -5;
    	this.imgNum += wichPic;
    	tester.loadMovie(catalog[imgNum][1]);
    	tester.onData = function() {
    		trace("caricato");
    		this.onEnterFrame = function() {
                    trace("OK")
    		this._alpha += alphaChange;
    		if (this._alpha < 0) {
    		alphaChange = alphaChange * -1;
    		}
    		if (this._alpha > 100) {
    		alphaChange = 0;
    		this._alpha = 99.9999;
    		}
    	};
    }
    "Studiare è questo.
    Improvvisamente si comprende qualcosa
    che si era capita da tutta la vita,
    ma da un nuovo punto di vista".

  7. #7
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    Mi sa che a quel punto non è ancora perfettamente carico (a parte il fatto che devi usare l'onLoad). Prova così:

    codice:
    tester.onData = function()
    {
    	trace("tester.onData");
    }
    tester.onLoad = function()
    {
    	trace("tester.onLoad");
    	intID = setInterval(function(tg){
    						clearInterval(intID)
    						tg.onEnterFrame = function()
    						{
    							trace("tester.onEnterFrame")
    							this._alpha += alphaChange;
    							if (this._alpha < 0) {
    								alphaChange = alphaChange * -1;
    							}
    							if (this._alpha > 100) {
    								alphaChange = 0;
    								this._alpha = 99.9999;
    							}
    						};
    					}, 100, this);
    };

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    332
    Originariamente inviato da negatyve
    Mi sa che a quel punto non è ancora perfettamente carico (a parte il fatto che devi usare l'onLoad). Prova così:

    codice:
    tester.onData = function()
    {
    	trace("tester.onData");
    }
    tester.onLoad = function()
    {
    	trace("tester.onLoad");
    	intID = setInterval(function(tg){
    						clearInterval(intID)
    						tg.onEnterFrame = function()
    						{
    							trace("tester.onEnterFrame")
    							this._alpha += alphaChange;
    							if (this._alpha < 0) {
    								alphaChange = alphaChange * -1;
    							}
    							if (this._alpha > 100) {
    								alphaChange = 0;
    								this._alpha = 99.9999;
    							}
    						};
    					}, 100, this);
    };

    Grazie.
    Quindi usando onLoad controllo il caricamento dell'immagine nel clip giusto?

    E il parametro tg? E' un altro clip?
    "Studiare è questo.
    Improvvisamente si comprende qualcosa
    che si era capita da tutta la vita,
    ma da un nuovo punto di vista".

  9. #9
    Utente di HTML.it L'avatar di negatyve
    Registrato dal
    Feb 2001
    Messaggi
    9,479
    onData viene chiamato più volte durante il caricamento, ad indicare un cambio del valore di movieclip.getBytesLoaded(), mentre onLoad viene chiamato a caricamento completo.
    Ora, evidentemente, quando viene chiamato l'evento onLoad il filmato (o immagine) esterno/a sta ancora inizializzandosi nel movieclip caricato, e può quindi ancora cancellare le variabili. Per questo motivo, con il setinterval, sposti l'assegnazione dell'enterframe a 100 millisecondi dopo. Per impostare il target, passi al setinterval un parametro:

    codice:
    			alphaChange = 0;
    								this._alpha = 99.9999;
    							}
    						};
    					}, 100, this);
    };
    che fa riferimento a "tester". Quando la funzione viene chiamata, questa riceve il parametro "tg" (appunto tester), e lo utilizza per l'assegnazione dell'onEnterFrame:

    codice:
    intID = setInterval(function(tg){
    tg è un nome a caso, potrebbe essere qualunque cosa:

    codice:
    tester.onData = function()
    {
    	trace("tester.onData");
    }
    tester.onLoad = function()
    {
    	trace("tester.onLoad");
    	intID = setInterval(function(topolino){
    						clearInterval(intID)
    						topolino.onEnterFrame = function()
    						{
    							trace("tester.onEnterFrame")
    							this._alpha += alphaChange;
    							if (this._alpha < 0) {
    								alphaChange = alphaChange * -1;
    							}
    							if (this._alpha > 100) {
    								alphaChange = 0;
    								this._alpha = 99.9999;
    							}
    						};
    					}, 100, this);
    };

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2001
    Messaggi
    332
    Originariamente inviato da negatyve
    onData viene chiamato più volte durante il caricamento, ad indicare un cambio del valore di movieclip.getBytesLoaded(), mentre onLoad viene chiamato a caricamento completo.
    Ora, evidentemente, quando viene chiamato l'evento onLoad il filmato (o immagine) esterno/a sta ancora inizializzandosi nel movieclip caricato, e può quindi ancora cancellare le variabili. Per questo motivo, con il setinterval, sposti l'assegnazione dell'enterframe a 100 millisecondi dopo. Per impostare il target, passi al setinterval un parametro:

    codice:
    			alphaChange = 0;
    								this._alpha = 99.9999;
    							}
    						};
    					}, 100, this);
    };
    che fa riferimento a "tester". Quando la funzione viene chiamata, questa riceve il parametro "tg" (appunto tester), e lo utilizza per l'assegnazione dell'onEnterFrame:

    codice:
    intID = setInterval(function(tg){
    tg è un nome a caso, potrebbe essere qualunque cosa:

    codice:
    tester.onData = function()
    {
    	trace("tester.onData");
    }
    tester.onLoad = function()
    {
    	trace("tester.onLoad");
    	intID = setInterval(function(topolino){
    						clearInterval(intID)
    						topolino.onEnterFrame = function()
    						{
    							trace("tester.onEnterFrame")
    							this._alpha += alphaChange;
    							if (this._alpha < 0) {
    								alphaChange = alphaChange * -1;
    							}
    							if (this._alpha > 100) {
    								alphaChange = 0;
    								this._alpha = 99.9999;
    							}
    						};
    					}, 100, this);
    };

    ti ringrazio.
    "Studiare è questo.
    Improvvisamente si comprende qualcosa
    che si era capita da tutta la vita,
    ma da un nuovo punto di vista".

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.