Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329

    Effettuare un FX di mootools su più DIV

    Vorrei capire che cosa sbaglio in quello che ho scritto:
    Codice PHP:
     window.addEvent('domready', function() {
           
              var 
    n_img document.getElementsByName("cont_img").length;
              var 
    arr_img = new Array();
              
    //var ok = $('ok'), ok2 = $('ok2'), 
              
    var fx = Array();
           
              for(var 
    i=0i<n_imgi++){  
                   
    arr_img[i] = $('cont_img_'+i);
                   
    fx[i] = new Fx.Tween(arr_img[i], {duration1000transition'cubic:in:out'link:'chain'});
                   
                   
    arr_img[i].addEvent('mouseover', function() {
                    
    alert(i);                                           
                             
    fx[i].start('width'100);
                          
    fx[i].start('height'100);
                   });
              }
              
    //alert(10);
           
             
           
    }); 
    Praticamente ho più DIV (thumbnail) creati dinamicamente con PHP, il fatto è che se nell fx[] metto uno numero l'effetto funziona, mentre se lascio la "i" del for no.
    L'alert(i) in quel punto mi da sempre il numero di DIV contenuto o meglio dire, mi da la "i" fuori da for quando si verifica la condizione di uscita del for.

    Come fare?
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    iniziando ad usare veramente mootools:
    $$ ed un selettore opportuno invece di getElementsByName,
    each al posto del ciclo for...
    e vedi che la tua i non va piu' fuori scope...

  3. #3
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Ok, grazie, ma mi potresti dare una mano....
    Io ho fatto così, ma non va, perchè non ho mai usato 'each':
    Codice PHP:
    window.addEvent('domready', function() {
           
              var 
    n_img = $$("cont_img").length;
              var 
    arr_img = new Array();
              
              for(var 
    i=0i<n_imgi++){ arr_img[i] = $("cont_img_"+i); }
              var 
    fx = Array();
           
           
              $$(
    ".cont_img").each(function(el){  //alert(10);
                  // el = $$('cont_img');
                   
    fx[el] = new Fx.Tween(el, {duration1000transition'cubic:in:out'link:'chain'});
                   
                   
    el.addEvent('mouseover', function() {
                                                               
                             
    fx[el].start('width'100);
                          
    fx[el].start('height'100);
                   });
              })
              
    //alert(10);
           
             
           
    });//FX
        
    }//Controllo se devo attivare l'effetto 
    E' solo da oggi che cerco chi usare Mootools, per molte cose mi funge, anche se vorrei trovare qualche BUONA guida, perchè la documentazione che c'è sul sito inerente alla classe FX non è proprio fatta bene.
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  4. #4
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Non capisco proprio come potrei fare... ad applicare un TWEEN su più elementi creati dinamicamente....
    Codice PHP:
    div = $$("div");
           var 
    myFx = new Array();
           var 
    count 0//alert(div.length);
           //$("main0").set("opacity", 0.2);
           
    div.each(function(el){
                    var 
    main "main"+count//alert(main);     
                    
    myFx[count] = new Fx.Tween($("main"+count), {duration:200link:'cancel'}); //alert("");
                    
    count++;
                 
           });
    //DIV.EACH
           
           
    for(var i=0i<div.lengthi++){
             $(
    "main"+i).addEvent("mouseover", function(){ alert(count);
                             
    myFx[count].start("opacity"0.2); 

                             
    //alert(i);
               
    });//ADD.EVENT
             
           
    }//FOR 
    ma ancora non va...
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  5. #5
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Problema risolto ....anche se non capisco come mai su IE non carica gli script.
    Di seguito i 3 script per le gallerie relizzate da me:

    Codice PHP:
    /*
    GALLERY 1:
            tutte le thumbnails inizializzate con una opacità "in_opacity"
            mouseover      : la thumbnail arriva ad una opacità di 1 (totale)
            mouseout       : la thumbnail arriva ad una opacità di "in_opacity"
            id_parteComune : è una parte dell' id(comuse a tutti i DIV delle thumbnail): se id è 'img5' scrivere solo 'img' 
                             ed in seguito verrà sommato il "5"
            class          : la classe dei DIV delle thumbnail                 
    */
    function fade_gallery1(id_parteInComune, class, in_opacity){//
          
    var count 0;
             var 
    myFx = new Array();
          var 
    num = $$(class);
                    
    //alert(id_parteInComune+" - "+class);
          
    $$(class).each(function(el){//imposto i Tween per quanti sono i "n_class""
                  
    myFx[count] = new Fx.Tween($(id_parteInComune+count), {duration:200link:'cancel'}); //alert("");
                    
    $(id_parteInComune+count).set("opacity"in_opacity);
                  
    count++; 
          });
    //DIV.EACH
                  
          
    var 0;
          $$(class).
    each(function(el){    var i;                                                              
                 
    //la "i" viene vista (scope) in "$('cont_img_'+i)", ma non in "myFx[i]"
               
    $(id_parteInComune+i).addEvent("mouseover", function(){ //alert(i);
                   
    myFx[j].start("opacity"1); 
               });
    //ADD.EVENT
                 
              
    $(id_parteInComune+i).addEvent("mouseout", function(){ 
                   
    myFx[j].start("opacity"in_opacity);
              });
    //ADD.EVENT
              
    i++; //j++;
          
    });//DIV.EACH

    }//FUNCTION FADE_GALLERY1 /////////////////////////////////////////////////////////////////////////////////////////////


    /*
    GALLERY 2:
            mouseover: la thumbnail su cui si effettua il mouseover resta in totale opacità, mentre le altre arrivano ad 
                       una opacità pari a "to_opacity"
            mouseout : le altre thumbnail arrivano a totale opacità
    */
    function fade_gallery2(id_parteInComune, class, to_opacityspeed){
          var 
    count 0;
             var 
    myFx;// = new Array();
          
    var num = $$(class); 
          var 
    id id_parteInComune;
          $$(class).
    set("morph",{duration:speedlink:"cancel"});
          
         
    // $$(class).set("morph", {duration:500}); 
          
          
    var 0;
          $$(class).
    each(function(el){    var i;                                                              
          
    //la "i" viene vista (scope) in "$(id'+i)", ma non in .addEvent
               
               
    $(id+i).addEvent("mouseover", function(){
                    var 
    ii=0;    
                    $(
    id+j).setStyle("border""2px solid red");
                    
                    while(
    ii < $$(class).length){
                        if(
    ii!=j){ $(id+ii).morph({"opacity":to_opacity}); }
                        
    ii++;
                    }
               });
    //ADD.EVENT 
              
              
    $(id+i).addEvent("mouseout", function(){ 
                        $(
    id+j).setStyle("border""2px solid white");
                        $$(class).
    morph({"opacity":1}); });//ADD.EVENT
              
    i++;
          });
    //DIV.EACH

    }//FUNCTION FADE_GALLERY2   ////////////////////////////////////////////////////////////////////////////////////////////////


    /*
    GALLERY 3:
            mouseover: la thumbnail su cui si effettua il mouseover resta in totale opacità, mentre le opacità delle altre
                       thumbnails assumono un'opacità che dipende dalla loro distanza dalla thumbnail su cui viene fatto il
                       mouseover (opacità minima max_opacity/num DIV(massima distanza), mentre la "massima" max_opacity)
            mouseout : le altre thumbnail arrivano a totale opacità
    */
    function fade_gallery3(id_parteInComune, class, max_opacityspeed){
          var 
    count 0;
             var 
    myFx;// = new Array();
          
    var num = $$(class); 
          var 
    id id_parteInComune;
          $$(class).
    set("morph",{duration:speedlink:"cancel"});
          
         
    // $$(class).set("morph", {duration:500}); 
          
          
    var 0;
          $$(class).
    each(function(el){    var i;                                                              
          
    //la "i" viene vista (scope) in "$(id'+i)", ma non in .addEvent
               
               
    $(id+i).addEvent("mouseover", function(){
                    var 
    ii=0;    
                    $(
    id+j).setStyle("border""2px solid red");
                    while(
    ii < $$(class).length){
                        if(
    ii!=j){ 
                           var 
    = $$(class).length;
                           var 
    dist Math.abs(ii-j);
                           
    opacity max_opacity/dist;
                           
    //alert(dist+" - "+opacity);
                           
    $(id+ii).morph({"opacity":opacity}); 
                        }
                        
    ii++;
                    }
               });
    //ADD.EVENT 
              
              
    $(id+i).addEvent("mouseout", function(){ 
                        $(
    id+j).setStyle("border""2px solid white");
                        $$(class).
    morph({"opacity":1}); });//ADD.EVENT
              
    i++;
          });
    //DIV.EACH


    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  6. #6
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    bravo

    se ho capito bene cosa vuoi ottenere, vediamo un paio di cose
    (ho dato un' occhiata solo al primo script)
    - perche' 2 each? te ne basta uno, in cui fai tutto quello che ti serve
    - perche' contare "a mano" quando il secondo parametro della funzione chiamata in each e' gia' un contatore? in una situazione piu' complessa potrebbe anche tornare utile ma.. al momento...
    - ancora problemi con la i fuori scope? bind!

    una sgrossata:
    codice:
    function fade_gallery1(clss, in_opacity){
    	var myFx = new Array();
    	$$(clss).each(function(el,i){
    		myFx[i] = new Fx.Tween(el, {duration:200, link:'cancel'});
    		el
    		.set("opacity", in_opacity)
    		.addEvent("mouseover", function(){
                   myFx[i].start("opacity", 1);
            }.bind(i))
            .addEvent("mouseout", function(){
                   myFx[i].start("opacity", in_opacity);
            }.bind(i));
    	});
    }
    ciao

    Originariamente inviato da Donovant
    non capisco come mai su IE non carica gli script.
    "class" e' parola molto molto riservata
    e IE di certo ci mette del suo ad incasinarsi molto facilmente

  7. #7
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Grazie mille......avevo messo quella "i" li, ma mi dava errore, forse sbagliavo da un'altra parte.
    Ho notato che la "i" in questo modo non serve proprio, in quanto non serve nemmeno l'array di Fx.Tween :
    Codice PHP:
    function fade_gallery1(clssin_opacity){//
          
    $$(clss).each(function(el,i){//imposto i Tween per quanti sono i "n_clss""
                
    var myFx = new Fx.Tween(el, {duration:200link:'cancel'}); //alert("");
                    
    el.set("opacity"in_opacity)
                         .
    addEvent("mouseover", function(){ 
                                   
    myFx.start("opacity"1); }.bind(i))//bind(i) serve per propagare lo scope della "i"
                         
    .addEvent("mouseout", function(){
                                   
    myFx.start("opacity"in_opacity); });//.bind(i));
                               
                   
          
    });//DIV.EACH
    }//FUNCTION FADE_GALLERY1 ///////////////////////////////////////////////////////////////////////////////////////////// 
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  8. #8
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    certamente, molto piu' immediato

  9. #9
    Utente di HTML.it L'avatar di Donovant
    Registrato dal
    Sep 2005
    residenza
    London
    Messaggi
    1,329
    Ed ora sai perchè aggiungendo 3 script (lightbox2.04) lo script che ho creato io su FF funge e su IE no???
    Domandone da 1milione di penne di pollo...!
    Beati gli smemorati, perchè avranno la meglio anche sui loro errori...

    My gallery: http://donovant.deviantart.com/gallery/

  10. #10
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    hai gia' aperto una discussione apposita per questo problema

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.