Visualizzazione dei risultati da 1 a 6 su 6

Discussione: onpress = function

  1. #1
    Utente di HTML.it L'avatar di fazius
    Registrato dal
    Mar 2006
    residenza
    Torino
    Messaggi
    870

    onpress = function

    ho trovato questo script qui nel forum l'ho provato e va bene solo a metà carica le thumb ma non crea il pulsante per richiamare l'immagine grande e non riesco a farlo funzionare non capisco l'errore allego lo script sperando che un'esperto mi spieghi grazie
    Diciamo che le venti fotine le le metti con nomi sequenziali in una cartella di nome:

    immagini_small -> 1.jpg 2.jpg 3.jpg ecc...

    e quelle grandi le metti in

    immagini_big -> 1.jpg 2.jpg 3.jpg

    Supponiamo che le immagini piccole siano di altezza 40 e larghezza 60 e le mettiamo in riga con 10 px di distanza tra di loro...
    */
    //Creiamo il preloader prima di tutto
    //Metodo per il progress
    var listener:Object = new Object();
    listener.onLoadProgress = function(bytesLoaded, bytesTotal) {
    // ottengo la percentuale con la solita proporzione
    trace("carico");
    var percentuale:Number = Math.floor((bytesLoaded / bytesTotal) * 100);
    //con la percentuale ci fai quello che vuoi, barra in scala, testo di loading ecc...
    };
    //Metodo per il caricamento avvenuto
    listener.onLoadInit = function(target:MovieClip) {
    trace("finito");
    // L'immagine grande è caricata ed è pronta per eventuali effetti
    //tipo
    target._alpha = 0;
    target.onEnterFrame = function():Void {
    if (this._alpha < 100) {
    this._alpha += 1;
    } else {
    delete this.onEnterFrame;
    }
    };
    };
    var loader:MovieClipLoader = new MovieClipLoader();
    loader.addListener(listener);
    /*
    Prima di tutto creiamo un clip vuoto sulla root che conterrà le thumbs, in modo tale che se poi le vogliamo spostare sullo stage spostiamo un solo clip, e un clip vuoto per caricare le immagini grandi che metyteremo un po più giu:
    */
    _root.createEmptyMovieClip("thumbs_cont", 1000);
    _root.createEmptyMovieClip("big_cont", 2000);
    //io lo posiziono sul vertice alto, poi lo possiamo spostare dove ci pare:
    _root.thumbs_cont._x = 0;
    _root.thumbs_cont._y = 0;
    _root.big_cont._x = 0;
    _root.big_cont._y = 100;
    /*Adesso all'interno di questi clip creiamo i 20 contenitori per le thumbs e chiamiamo il preloader che poi vedremo:*/
    for (var a:Number = 1; a < 21; a++) {
    _root.thumbs_cont.createEmptyMovieClip("cont" + a, a);
    _root.thumbs_cont["cont" + a]._x = (60 + 10) * a;
    _root.thumbs_cont["cont" + a]._y = 0;
    //assegniamo alle thumbs un id per richiamare le img grandi
    _root.thumbs_cont["cont" + a].id = a;
    //Carichiamo l'immagine chiamando il preloader:
    loader.loadClip("immagini_small/" + a + ".jpg", _root.thumbs_cont["cont" + a]);
    //Assegniamo una azione per il caricamento dell'immagine grande al click
    _root.thumbs_cont["cont" + a].onPress = function():Void {
    loader.loadClip("immagini_big/" + this.id + ".jpg", _root.big_cont);
    };
    }


    uso flashmx
    ciao a tutti
    lunga vita e prosperità

  2. #2
    Utente di HTML.it L'avatar di fazius
    Registrato dal
    Mar 2006
    residenza
    Torino
    Messaggi
    870
    lunga vita e prosperità

  3. #3
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao.

    Premetto che utilizzo Flash8 ma il problema è lo stesso.
    Ti spiego...

    - Problema

    E' stato creato un nuovo clip dinamicamente.
    Al clip viene associato un evento onPress tramite script.
    Attraverso il metodo loadClip viene caricata al suo interno un'immagine.

    L'evento onPress non funziona.

    - Causa

    Quando si utilizza il metodo loadClip (così come per loadMovie) nel momento in cui il caricamento (dell'immagine o del filmato swf che sia) è stato completato, tutte le variabili, le funzioni e gli eventi assegnati dinamicamente all'istanza in riferimento, perdono la loro validità.
    Ovvero non sono più definiti.

    Cito direttamente dalla guida in linea di flash in riferimento a quanto viene riportato per il metodo loadMovie (che vale comunque anche per loadClip):
    I risultati dell'uso di gestori di eventi con MovieClip.loadMovie() possono essere imprevedibili. Se si associa un gestore di eventi a un pulsante tramite on() oppure si crea un gestore dinamico tramite un metodo del gestore di eventi quale MovieClip.onPress(), quindi si chiama loadMovie(), il gestore di eventi non rimarrà attivo dopo il caricamento del nuovo contenuto. Se invece si associa un gestore di eventi a un clip filmato tramite onClipEvent() o on(), quindi si chiama loadMovie() su tale clip filmato, il gestore di eventi rimarrà attivo anche dopo il caricamento del nuovo contenuto.
    Da questo puoi capire perché il metodo onPress nel tuo script non funziona.

    Oltre al metodo, risulterà indefinita anche la variabile id associata ad ogni istanza.

    Se visualizzi attraverso il debug le variabili di tutto il filmato (oppure attraverso un trace) puoi notare che dopo il caricamento delle small ogni relativa istanza non possiederà più né la funzione onRess né la variabile "id" assegnata prima del caricamento.

    - Soluzioni
    Ti posso consigliare due possibili soluzioni.

    Potresti dichiarare l'evento onPress quando il caricamento è stato completato, cioè nell'evento onLoadInit del listener che gestisce il caricamento.
    Avresti però altri due problemi da risolvere.
    Non avrai direttamente disponibile la variabile "id" che ti serve poi poter specificare il nome della relativa immagine big da caricare attraverso l'evento onPress.
    Potresti in questo caso ottenere diversamente il valore che ti serve ma avrai comunque un secondo problema... il listener viene utilizzato per caricare tutte le immagini, anche le big alle quali però non dovrebbe essere assegnato l'evento onPress.
    Potresti risolvere utilizzando delle condizioni o utilizzando due differenti listener o con altro sistema.

    Una seconda soluzione, che in questo caso ti consiglio maggiormente, sta nel creare un clip contenitore annidato in quello principale utilizzato per ogni small da caricare.
    In questo modo, per ogni small avrai un clip principale al quale puoi assegnare tutte le variabili, le funzioni e gli eventi che vuoi, mentre al suo interno ci sarà il contenitore dell'immagine.
    Per cui al caricamento dell'immagine, tutte le variabili e gli eventi dichiarati nel contenitore principale, non perderanno la loro funzionalità.

    Ti posto qui sotto l'ultima parte di script modificata e adeguato a quest'ultima soluzione.
    In rosso ti evidenzio le parti importanti.
    codice:
    for (var a:Number = 1; a<21; a++) {
    	var cont:MovieClip = _root.thumbs_cont.createEmptyMovieClip("cont"+a, a);
    	cont.createEmptyMovieClip("img",0);
    	cont._x = (60+10)*a;
    	cont._y = 0;
    	//assegniamo alle thumbs un id per richiamare le img grandi
    	cont.id = a;
    	//Carichiamo l'immagine chiamando il preloader:
    	loader.loadClip("immagini_small/"+a+".jpg", cont.img);
    	//Assegniamo una azione per il caricamento dell'immagine grande al click
    	cont.onPress = function():Void  {
    		loader.loadClip("immagini_big/"+this.id+".jpg", _root.big_cont);
    	};
    }
    Nota inoltre che ho utilizzato la variabile "cont" per snellire lo script evitando di ripetere ogni volta la costruzione del nome istanza (_root.thumbs_cont["cont" + a])..

    Spero di essere stato sufficientemente esaustivo.

    Ti consiglio infine, se hai preso lo script da qualche guida, di segnalare questo problema all'autore, o se lo hai trovato in qualche discussione sul forum, di inserire un messaggio ed eventualmente menzionare le soluzioni che ho indicato in questa discussione, o indicare un semplice riferimento a questa discussione, in modo che possa essere d'aiuto ad eventuali utenti che potrebbero trovarsi sotto il mouse quello stesso script.

    Alla prossima
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  4. #4
    Utente di HTML.it L'avatar di fazius
    Registrato dal
    Mar 2006
    residenza
    Torino
    Messaggi
    870
    grazie segurò il tuo consiglio domani lo provo e se va come credo aggiungerò la soluzione al vecchio tred grazie ancora
    lunga vita e prosperità

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    No problem!
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    Utente di HTML.it L'avatar di fazius
    Registrato dal
    Mar 2006
    residenza
    Torino
    Messaggi
    870
    funziona perfettamente si potrebbe farne un tutorial grazie ancora
    lunga vita e prosperità

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 © 2025 vBulletin Solutions, Inc. All rights reserved.