Newsgroup: it.comp.lang.javascript
Titolo: ONMOUSE OUT nascondere DIV dopo 1 secondo

Ciao a tutti,
ho questo problema.
Stò creando un menu orizzontale con le classiche voci (azienda, prodotti,
etc...).
In questo menu c'è un semplice SWAP IMAGE sui nomi dei titoli...classico.
In più c'è la visualizzazione dei rispettivi DIV, dentro ai quali carico i
sottomenu di categoria.
Il problema è come posso temporizzare, diciamo per 1 secondo, la
visualizzazione dei DIV, quando il mouse va fuori da questi e in
contemporanea mantenere sempre il secondo stato dello SWAP IMAGE.
Mi spiego meglio:
Ho il mio menu.
Vai sul bottone azienda, si attiva contemporaneamente lo SWAP IMAGE sul
secondo stato e faccio visualizzare il LAYER. Tutto OK fino a qui...ora mi
sposto con il mouse sopra al DIV...e il mio SWAP RITORNA al primo
stato...vorrei che mantenesse il secondo...seleziono i sottomenu, ma senza
schiacciare niente ed esco dall'area del DIV.
Risultato: il mio div non sparisce...rimane ancora visualizzato e la mia
immagine menu rimane sul 1° staato.
Praticamente vorrei che il DIV sparisse dopo 1 secondo dall'uscita dalla sua
area e l'immagine mantenesse il suo stato MOUSE OVER anche quando sono sul
DIV.
Vi allego il codice di un bottone..poi potrei estenderlo su tutti.
Lo so io uso DW non sono capace di farlo tutto a mano...
SPERANZOSO COME SEMPRE, vi saluto...
P.S.: anche rimandi a LINK Tutorial sulla temporizzazone di questo mi sono
graditi.
Ciao Alen
_____________________________________________________________________
<HTML>
<HEAD>
<TITLE>Untitled Document</TITLE>
<META content="text/html; charset=windows-1252" http-equiv=Content-Type>
<SCRIPT language=JavaScript>
<!--
<!--
function MM_reloadPage(init) {  file://reloads the window if Nav4 resized
  if (init==true) with (navigator) {if
((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight;
onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH)
location.reload();
}
MM_reloadPage(true);
// -->
function MM_preloadImages() { file://v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length;
i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_swapImgRestore() { file://v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++)
x.src=x.oSrc;
}
function MM_findObj(n, d) { file://v4.01
  var p,i,x;  if(!d) d=document;
if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++)
x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++)
x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { file://v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array;
for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc)
x.oSrc=x.src; x.src=a[i+2];}
}
function MM_showHideLayers() { file://v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null)
 v=args[i+2];
    if (obj.style) { obj=obj.style;
v=(v=='show')?'visible':(v='hide')?'hidden':v; }
    obj.visibility=v; }
}
file://-->
</SCRIPT>
<META content="MSHTML 5.00.3315.2870" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff
onload="MM_preloadImages('Siti/lineafit/imm/bellezza_f6.gif','Siti/lineafit/
imm/body_building_f4.gif')"
text=#000000>
<DIV id=lay_azienda
style="BACKGROUND-COLOR: #0000ff; BORDER-BOTTOM: #000000 1px; BORDER-LEFT:
#000000 1px; BORDER-RIGHT: #000000 1px; BORDER-TOP: #000000 1px; HEIGHT:
180px; LEFT: 15px; POSITION: absolute; TOP: 37px; VISIBILITY: hidden; WIDTH:
112px; Z-INDEX: 1; layer-background-color: #0000FF"></DIV>
<A
href="javascript:;" onmouseout=MM_swapImgRestore()
onmouseover="MM_swapImage('Image1','','Siti/lineafit/imm/bellezza_f6.gif',1)
;MM_showHideLayers('lay_azienda','','show')"><IMG
border=0 height=25 name=Image1 src="Siti/lineafit/imm/bellezza_f2.gif"
width=102></A>
</BODY></HTML>

Spero di aver capito il discorso di non quotare tutto...nel dubbio ho
cancellato tutto... Praticamente lasciavo tutto il messaggio e in + mettevo
la mia risposta sotto? Spero di fare giusto d'ora in poi.
Quindi devo rispondere sempre in alto e tagliare un po' delle risposte
vecchie? Giusto?
_______________________________________________________________
http://www.odm.it/test/timeout.htm
Ti caricato l'esempio qui.
GRAZIE subito per l'aiuto.
La compatibilità è totale per ora: NN 4.77, NN 6.2, Explorer 5+
Sicuramente è migliorato da prima...però mi chiedo se fosse possibile fino a
quando mi trovo sul DIV ,di non far partire il conteggio del time out.
Praticamante il conteggio dovrebbe partire sia al MOUSEOUT dal bottone del
menu che al MOUSEOUT del DIV...non penso che sia possibile questo....anche
perché come posso dirgli fammi vedere il div fino a quando ci sono sopra con
il mouse....
Ho risolto per ora al lavoro, mettendo delle immagini trasparenti nel
perimetro EST, OVEST e Sud del DIV, così quando uno stà per uscire ONMOUSE
OVER sulle immagini del perimetro e nascondo il mio DIV.
Mi sembra strano che debba usare questo stratagemma.....
Spero di essere stato + chiaro.
Ciao e Grazie Alen

 dire che non ce l'ho :-)
Praticamente è come il menu di jspoint...quando vai sopra compare il DIV,
quando esci scompare, però il mio in + deve anche mantenere lo SWAP IMAGE
del secondo stato....a voi rimane sempre uguale..
Grazie comunque come sempre dell'aiuto.
P.S.: ho quotato bene ora?
BYE

 semplicemente con un po' di tempo per studiarci sarebbe meglio. 
Ora che è più facile, faccio una bella figura ed intervengo io! :-))
Nella riga dell'HREF:
- metti gli spazi dove servono
- setTimeout("...",2000)
  e non
  setTimeout(&quot;...&quot;,2000)
- sempre nel setTimeout porta dentro anche il restoreimage
- nel setTimeout i parametri devi passarli, così come sono adesso non 
sono altro che stringhe.
In pratica diventa così (tutto su una riga!):
onmouseout=setTimeout("MM_showHideLayers('"+lay_azienda+"','','"+hide+"')
;MM_swapImgRestore()",2000)> 
Prova...
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
------------------------------------------------------------------------
http://www.dev2dev.it
 - La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
 ----> itALY = it <----

 Prova...
Dimenticavo: c'è un GROSSO inconveniente.
Se prima che siano trasforsi i 2 secondi il mouse torna sul bottone, 
l'evento setTimeout si scatena comunque.
Non so se è sufficiente, comunque:
- nello script mettici una variabile 
     var timer=null;
- nell'onMouseOver aggiungici anche "timer=null" insieme alle altre 
istruzioni, e la riga che ho scritto io falla diventare:
onMouseOut=timer=setTimeout("MM_showHideLayers('"+lay_azienda+"','','"+hi
de+"');MM_swapImgRestore()",2000)> 
Mi sono appena accordo di un altro errore: JavaScript è case sensitive! 
Attento alle maiuscole dove servono.


 Attento alle maiuscole dove servono.
__________
<A href="javascript:"
onMouseOut=timer=setTimeout("MM_showHideLayers('"+lay_azienda+"','','"+hide+
"');MM_swapImgRestore()",2000)
onmouseover="timer=null;MM_swapImage('bb','','Untitled%20Document_file/body_
building_f4.gif',1);MM_showHideLayers('lay_azienda','','show')"><IMG
border=0 height=25 name=bb src="Untitled Document_file/body_building_f3.gif"
width=150>
</A>
questo è quello che ho fatto...mi dice che hide non è definito...
non ho ben capito dove devo mettere la variabile
var timer=null
Grazie Ricky x ora...

 var timer=null
Da qualsiasi parte nello script. Anche subito dopo <SCRIPT>
Non in una funzione cmq, è questo che intendo.
