Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12

Discussione: Menu con ciclo for

  1. #1
    Utente di HTML.it L'avatar di daem
    Registrato dal
    Oct 2000
    Messaggi
    199

    Menu con ciclo for

    Ho un menu composto da 6 voci. Ci sono 6 aree sensibili che muovono 6 rispettivi movieclip. Invece di utilizzare lo script:

    area1_mc.onRollOver=function(){
    puls1_mc.gotoAndStop(2);
    }
    area1_mc.onRollOut=function(){
    puls1_mc.gotoAndStop(1);
    }
    area2_mc.onRollOver=function(){
    puls2_mc.gotoAndStop(2);
    }
    area2_mc.onRollOut=function(){
    puls2_mc.gotoAndStop(1);
    }
    .........................


    pensavo di utilizzare un ciclo for che vada da 1 a 6. E quindi ho sintetizzato il tutto così:

    for (i=0; i<6; i++){
    ["area"+i+"_mc"].onRollOver=function(){
    ["puls"+i+"_mc"].gotoAndStop(2);
    }
    }

    ma mi dà errore di sintassi. Dove sbaglio secondo voi?
    Grazie mille

  2. #2
    con quella sintassi vedi mettere "_root" davanti !
    codice:
    for (i=0; i<6; i++) {
    	_root["area"+i+"_mc"].onRollOver = function() {
    		_root["puls"+i+"_mc"].gotoAndStop(2);
    	};
    }
    Lorenza

  3. #3
    Utente di HTML.it L'avatar di daem
    Registrato dal
    Oct 2000
    Messaggi
    199
    Grazie!
    In effetti non mi da più errore di sintassi, il problema è che non mi funziona. Non si muove un bel niente...

  4. #4
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da daem
    Grazie!
    In effetti non mi da più errore di sintassi, il problema è che non mi funziona. Non si muove un bel niente...
    prova con gli eval()

    codice:
    for(var i = 1; i<=6; i++){
    	var mc = eval("area"+i+"_mc");
    	var p = eval("puls"+i+"_mc");
    	mc.onRollOver = function(){
    		p.gotoAndStop(2);
    	}
    	mc.onRollOut = function(){
    		p.gotoAndStop(1);
    	}
    }

  5. #5
    Utente di HTML.it L'avatar di daem
    Registrato dal
    Oct 2000
    Messaggi
    199
    Originariamente inviato da and80
    prova con gli eval()

    codice:
    for(var i = 1; i<=6; i++){
    	var mc = eval("area"+i+"_mc");
    	var p = eval("puls"+i+"_mc");
    	mc.onRollOver = function(){
    		p.gotoAndStop(2);
    	}
    	mc.onRollOut = function(){
    		p.gotoAndStop(1);
    	}
    }
    Grazie del consiglio. Non avevo mai utilizzato eval()
    Se faccio il trace di mc o p mi crea in effetti tutti i nomi giusti. Il problema è che qualsiasi area tocco è solo il puls6_mc che si muove. Devo sicuramente cambiare l'impostazione del ciclo for, ma non so come sinceramente.
    Secondo me non è possibile fare quello che voglio fare! Almeno non in questo modo perchè lui segue il suo ciclo for, arriva a 6 ma non da il tempo a quelli intermedi di eseguire le due function di rollover e rollout. Spero di essere stato chiaro

  6. #6
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da daem
    Grazie del consiglio. Non avevo mai utilizzato eval()
    Se faccio il trace di mc o p mi crea in effetti tutti i nomi giusti. Il problema è che qualsiasi area tocco è solo il puls6_mc che si muove. Devo sicuramente cambiare l'impostazione del ciclo for, ma non so come sinceramente.
    Secondo me non è possibile fare quello che voglio fare! Almeno non in questo modo perchè lui segue il suo ciclo for, arriva a 6 ma non da il tempo a quelli intermedi di eseguire le due function di rollover e rollout. Spero di essere stato chiaro
    scusami son stato un po' nello scrivere il codice... prova con
    codice:
    for(var i = 1; i<=6; i++){
    	var mc = eval("area"+i+"_mc");
    	mc.i = i;
    	mc.onRollOver = function(){
    		var p = eval("puls"+this.i+"_mc");
    		p.gotoAndStop(2);
    	}
    	mc.onRollOut = function(){
    		var p = eval("puls"+this.i+"_mc");
    		p.gotoAndStop(1);
    	}
    }
    sono anche impossibilitato a provarlo, vedi un po' tu se va bene

  7. #7
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da daem
    Secondo me non è possibile fare quello che voglio fare! Almeno non in questo modo perchè lui segue il suo ciclo for, arriva a 6 ma non da il tempo a quelli intermedi di eseguire le due function di rollover e rollout. Spero di essere stato chiaro
    no assolutamente, non è così... il fatto è che al momento in cui tu utilizzi il metodo onRollOver/onRollOut, il ciclo è finito da un pezzo, il tempo di esecuzione non c'entra
    in pratica il codice viene eseguito in questo modo
    - prima tutto il ciclo for, esclusi i metodi
    - poi i metodi che, visto che il ciclo è finito, si ritroveranno sempre come valore di "i", l'ultimo del ciclo (quindi i=6)

    per ovviare basta assegnare ad ogni clip il valore di "i" durante l'esecuzione del ciclo e ripescarlo nei metodi con "this.i", poi nel metodo ci fai quel che vuoi

    la questione è un po' più articolata di come la sto spiegando, ma il concetto può essere visto in questo modo

  8. #8
    Utente di HTML.it L'avatar di daem
    Registrato dal
    Oct 2000
    Messaggi
    199
    Originariamente inviato da and80
    no assolutamente, non è così... il fatto è che al momento in cui tu utilizzi il metodo onRollOver/onRollOut, il ciclo è finito da un pezzo, il tempo di esecuzione non c'entra
    in pratica il codice viene eseguito in questo modo
    - prima tutto il ciclo for, esclusi i metodi
    - poi i metodi che, visto che il ciclo è finito, si ritroveranno sempre come valore di "i", l'ultimo del ciclo (quindi i=6)
    era quello che intendevo dire, l'hai spiegato sicuramente meglio
    E' proprio quello il problema, non c'è il collegamento tra il ciclo for e i metodi.
    Adesso provo a modificare. Grazie per l'aiuto!

  9. #9
    Utente di HTML.it L'avatar di and80
    Registrato dal
    Mar 2003
    Messaggi
    15,182
    Originariamente inviato da daem
    Grazie per l'aiuto!

  10. #10
    Utente di HTML.it L'avatar di daem
    Registrato dal
    Oct 2000
    Messaggi
    199
    Grazie and80, mi funziona perfettamente adesso.
    Solo una cosa, ho capito che il problema era che non avevo il richiamo dei singoli nomi all'interno del metodo, ma non ho capito il significato di ciò che hai messo fuori, cioè mc.i = i;
    E' l'incremento di mc giusto? Ma non capisco sinceramente la sintassi...
    Grazie ancora per l'aiuto

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.