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>