Visualizzazione dei risultati da 1 a 8 su 8

Hybrid View

  1. #1
    Ciao, ho apportato piccole modifiche di carattere esemplificativo, per animare il riquadro ho inserito la classe "cl_animate" al div relativo in modo che al click cambiando la posizione sia eseguita l'animazione.

    Per i click ripetuti è stato sufficiente controllare se era in atto una dissolvenza per non eseguire più volte l'azione.
    Ho inserito inoltre il display:none quando l'opacità diventava = 0 altrimenti era ancora possibile eseguire il click.

    In merito all'oggetto "Dissolve = { ... } " è una struttura javascript che permette di definire proprietà e metodi al suo interno però non permette l'istanziazione multipla.

    Avevo erroneamente interpretato la sola necessità di creare delle "dissolvenze". Scusa.


    Saluti Tony.


    codice:
    <!DOCTYPE>
    <html>
      <head>
    <style>
    
    
    body { background-color:#FFD; overflow:hidden;}
    
    
    div {
      text-align:center;
      font:16px Arial;
    }
    
    
    .cl_animate {
      transition: all 1.2s linear;
    }
    
    
      
    </style>
    <script>
    
    
    
    
    function f_act_dissolve(){
        
      if(Dissolve.act) return false;                            // se dissolvenza attiva non considerare i click
    
    
      Dissolve.Add("id_btn");
      Dissolve.Add("id_home"); 
       
      setTimeout(function(){ 
                    var j=document.getElementById("id_home"),
                      p=j.style.left,
                      pos=(p=="50%")?"130%":"50%";               // sposta da destra al centro (con animazione)  o da centro a destra 
                      j.style.left=pos; 
                 },55);                                          // attendi che l'elemento sia in display:block altrimenti l'animazione potrebbe non essere eseguita.
    }
    
    
    
    
    //------------------------------------------------------------------------------
    Dissolve={
      act:0,                 // se 0 nessuna dissolvenza in atto
      aidn:[],               // array di parametri delle dissolvenze
      tm:50,                 // tempo di attesa variazione di opacità (setTimeout)
      ostep:0.05,            // variazione di opacità di default
    
    
    Add:function(idn,stp){                            // idn è il nome dell'ID dell'elemento da nascondere/far comparire
    with(Dissolve){
        if(!stp) stp=ostep;                           // se non indicata usa il valore di default
        var d,o,j=document.getElementById(idn);       // j contiene è l'elemento su cui modificare l'opacità
        o=parseInt(j.style.opacity);                  // o contiene il valore di opacità iniziale 1.0 oppure 0.0
        if(!o) o=0;                                   //   se non settata poni a 0
        d=(o>0.5)?-1:1;                               // d determina se incrementare o decrementare l'opacità iniziale
        if(d>0) j.style.display="block";              // visualizza elemento in display:none
        aidn.push([j,o,d,stp]);                       // metto nell'array aidn i 4 parametri necessari al ciclo di dissolvenza
        if(!act) { act=1; Cycle(); }                  // se non è attiva alcuna dissolvenza in Cycle() lancio la funzione 
    }},
    
    
    Cycle:function(){
    with(Dissolve){
      var r,n=aidn.length;                                        // n contiene il numero di dissolvenze da processare
      if(!n) { act=0; return; }                                   // se non ce ne sono  esco da Cycle()
      for(r=0;r<n;r++) Dis(r);                                    // per ogni gruppo di parametri che compongono una dissolvenza eseguo uno step di inc/dec dell'opacità
      for(r=n-1;r>=0;r--) if(!aidn[r].length) aidn.splice(r,1);   // quando termina una dissolvenza l'array dei 4 parametri viene annullato (*) e deve essere tolto da aidn in modo che non venga più eseguito 
    setTimeout(function(){ Cycle(); },tm);                        // ripeti Cycle ogni tm millesimi di secondo (fino a quando ci sono elementi in aidn ) 
    }},
    
    
    Dis:function(r){
    with(Dissolve){
       var D=aidn[r];                   // D è l'array dei 4 parametri di dissolvenza da processare
       D[1] += (D[3]*D[2]);             // D[1] è l'opacità attuale che deve essere incrementata di D[3] in valore assoluto (D[2] determina la direzione +1 -1) 
       if(D[1]<0) {                     // se l'opacità è <0 il decremento è finito
        D[1]=0;  
        D[0].style.display="none";      // non più cliccabile
       }               
       if(D[1]>1) {
         D[1]=1;                        // se >1 l'incremento è finito
       }
       D[0].style.opacity=D[1];         // imposto l'opacità per l'elemento (D[0]) 
       if(!D[1] || D[1]==1) aidn[r]=[]; // se l'incremento o il decremento è finito annullo i 4 parametri della dissolvenza (*)
    
    
    }}
    
    
    }
    //------------------------------------------------------------------------------
    
    
    
    
    </script>  
      </head>
      <body>
    
    
    <!-- div contenitore della Home page -->
    <div id='id_home' class='cl_animate' style='position:absolute;left:130%;top:50%;margin:-300px;width:600px;height:600px;background-color:#48E;opacity:0.0;'>
      <br><span onclick='f_act_dissolve();' style='cursor:pointer;text-decoration:underline;'>Torna indietro</span>
    </div>
    
    
    <!-- div contenitore pulsante -->
    <div id='id_btn' style='position:absolute;left:50%;top:50%;margin:-60px;width:120px;height:120px;background-color:#FF0;opacity:1.0;'>
      <br>Test<br>
      <br>
      <button onclick='f_act_dissolve();' style='cursor:pointer;'>Entra nel sito:</button>
    </div>
    
    
      </body>
    </html>

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2009
    Messaggi
    78
    Quote Originariamente inviata da Tonenge Visualizza il messaggio
    ...
    Grazie mille sei davvero gentilissimo nel tuo adoperarti per aiutarmi, ma, e devo confessare un poco di imbarazzo, credo nuovamente di non essere stato preciso nella mia spiegazione ed un poco me ne dispiace, mi spiego:

    La tranzazione del quadrato era un esempio puramente casuale, l'animazione su cui sto lavorando è di fatto molto più complicata e realizzata in adobe edge e già compresa di dissolvenza finale.

    In realtà a me servirebbe comprendere come strutturare un codice che dica: quando l'animazione è terminata avvia una funzione (in questo caso specifico una dissolvenza in entrata di un div)
    ma non capisco se devo impostare un termine di tempo, esempio l'animazione dura 30sec e quindi scrivere il codice dicendo che sarà valido dopo 30 sec, ma non so se fattibile o realmente funzionale o se posso definire il video all'interno di una funzione e dirgli di verificare se è attivo o meno e quindi rispondere di conseguenza... per quanto posso studiare JavaScript manco ancora della conoscenza di molti elementi e metodi e forse spesso mi creo problemi complessi che hanno in realtà soluzioni semplici

    Per quanto riguarda gli oggetti a livello teorico posso definire cosa sono e come funzionano, ma sul lato pratico pecco ancora molto e fatico effettivamente ad inquadrare tutti gli elementi e/o a strutturare qualcosa di propriamente corretto e funzionale...

    ...ma principalmente mi sfugge quel add: cycle: e via dicendo, sono elementi che al momento non ho ancora riscontrato nel mio studio, o per lo meno non come tipo di scrittura

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