Newsgroup: it.comp.lang.javascript
Titolo: menu a scomparsa e NN6

Se qualche anima pia ha un po' di tempo da perdere...
Premesso che con Ie4+ e NN 4.x tutto OK...
ho modificato lo script e cercato di ottimizzarlo anche per NN6 ma:
1)non va l'evento chiamato con onMouseOut="draw()"  .
    Ho provato varie soluzioni (es. onclick) e credo che il problema sia
nella funzione....
2)sembra che il setInterval non vada.
So che ci sara' qualche errore di concetto ma abbiate pazienza......
ecco il codice:
----------------------------------------------------------------------------
------------------------------
<html><head><title></title>
  <style type="text/css">
<!--
#slidemenubar   {
font: bold 10px/20px Verdana;
background: #e0ffff 0pt 0pt;
border: solid 2.5px #add8e6;
position: absolute;
top: 100px;
left: -150px;
width: 160px }
#slidemenubar2 {
position: absolute;
left: -160px;
width: 170px;
top: 100px;
border: solid 1.5px #add8e6;
background-color: #e0ffff;
layer-background-color: lightcyan ;
font: bold 10px Verdana;
line-height:20px }
-->
</style>
  <script language="JavaScript1.2"><!--
function regenerate(){
 window.location.reload()
 }
function regenerate2(){
 if (document.layers)
   setTimeout("window.onresize=regenerate",400)
 else if (document.getElementById && ! document.all){
   setTimeout("window.onresize=regenerate",400)
   }
 }
// -->
</script>
 </head>
 <body bgcolor="white" onload="regenerate2()">
  <script language="JavaScript1.2"><!--
if (document.all)
document.write('<div id="slidemenubar2" style="left:-150"
onMouseOut="draw()" onMouseOver="pull()">')
// -->
  </script>
<layer id="slidemenubar" onMouseOut="draw()" onMouseOver="pull()">
<font size="2"><b>
         <script language="JavaScript1.2">
 <!--
var sitems=new Array()
var sitemlinks=new Array()
//
sitems[0]="Home"
sitems[1]="Link"
//
sitemlinks[0]="home.htm"
sitemlinks[1]="link.htm"
for (i=0;i<=sitems.length-1;i++)
document.write('<a href='+sitemlinks[i]+'>'+sitems[i]+'</a><br>')
 //-->
    </script>
        </b></font>
  </layer>
  <script language="JavaScript1.2">
if (document.getElementById && !document.all){
 themenu= document.getElementById("slidemenubar").style
 limiteDX=5
 limiteSX=-150
 }
if (document.all ){
 document.write('</div>')
 themenu=document.all.slidemenubar2.style
 limiteDX=0
 limiteSX=-150
 }
 else{
 themenu=document.layers.slidemenubar
 limiteDX=170
 limiteSX=5
 }
function pull(){
 if (window.drawit)
 clearInterval(drawit)
 pullit=setInterval("pullengine()",20)
 }
function draw(){
  if (window.pullit)
   clearInterval(pullit)
  drawit=setInterval("drawengine()", 10)
 }
function pullengine(){
 if (document.all&&themenu.pixelLeft<limiteDX){
  themenu.pixelLeft+=10
  }
 else if ((document.getElementById && !document.all)
&&themenu.left<limiteDX){
  themenu.left+=10
  }
 else if (document.layers&&themenu.left<limiteDX) {
  themenu.left+=5 }
 else if (window.pullit)
  clearInterval(pullit)
 }
function drawengine(){
 if (document.all&&themenu.pixelLeft>limiteSX){
  themenu.pixelLeft-=10}
 else if((document.getElementById ||document.layers)&&themenu.left>limiteSX)
  themenu.left-=10
 else if (window.drawit)
  clearInterval(drawit)
 }
</script>
</body></html>
----------------------------------------------------------------------------
------
Grazie.
maxmor

 nella funzione....
guardando velocemente il codice , non ho capito dove è la parte di codice
onMouseOut per NN6.......
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.atipower.it
    -new-
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

<layer id="slidemenubar" onMouseOut="draw()" onMouseOver="pull()">
A occhio direi che hai abbinato <LAYER> a NN6, che non lo supporta come gli
altri NS.
if (document.all || document.getElementById)
document.write('<div id="slidemenubar2" style="left:-150"
onMouseOut="draw()" onMouseOver="pull()">')
Ciao
www.gfcarlotti.it
fra...@gfcarlotti.it


Non funziona correttamente nemmeno il onMouseOver.
1) e' necessario valorizzare ..left=... prima di fare un confronto
2) il valore di left e' una stringa formata dal valore e dall'unita' di
misura es.: 10px
--------------
 if (document.all ){
  document.write('</div>')
  themenu=document.all.slidemenubar2.style
  limiteDX=0
  limiteSX=-150
 } else if (document.getElementById){
  themenu= document.getElementById("slidemenubar").style;
  themenu.left='-150px'; // valorizza il left altrimenti non fa il
confronto
  limiteDX=5
  limiteSX=-150;
 } else{
  themenu=document.layers.slidemenubar
  limiteDX=170
  limiteSX=5
 }
.......................
function pullengine(){
 if (document.all && themenu.pixelLeft<limiteDX){
  themenu.pixelLeft+=10
 }else if ((document.getElementById ) &&
parseInt(themenu.left)<limiteDX){ // parseInt resituisce il valore
numerico
  themenu.left=(parseInt(themenu.left)+10)+'px';  // aggiungo 10 al solo
valore numerico e accodo l'unita' di misura *px*
 }else if (document.layers && themenu.left<limiteDX) {
  themenu.left+=5
 }
 }
function drawengine(){
 if (document.all && themenu.pixelLeft>limiteSX){
  themenu.pixelLeft-=10
 } else if((document.getElementById ||document.layers)&&
parseInt(themenu.left)>limiteSX){
  themenu.left=(parseInt(themenu.left)-10)+'px';
 } else if (window.drawit) clearInterval(drawit)
 }
--------------------
Mi sembra che cosi' funzioni.
Saluti, Paolo

 altri NS.
[]
Agganciato a un foglio di style, come in questo caso, il tag "layer"
viene gestito (anche il tag "pippo"); dovrebbe dipendere
dall'implementazione XML di NS6; cosa di cui so molto poco.
Saluti, Paolo

 misura es.: 10px
Si adesso funziona, ti ringrazio. Ho dovuto solo aggiustare la
 condizione di drawengine() per netscape4.x perche' non riconosce il
parseInt.(credo)
Solo alcune domande concettuali:
    quando dici "valorizzare" intendi inizializzare ad un valore la
variabile? Se e' cosi in realta' il valore
document.getElementById("slidemenubar").style.left
non e' gia' inizializzato nel foglio di stile?
    Tutti i valori simili a left sono visti da NN6 come stringhe?
    parseInt serve quindi a "prendere la parte intera" della stringa...
    cosa che si dovrebbe fare anche per altri valori quindi.....
Ti ringrazio dell'aiuto.
Ciao e buon Lavoro
maxmor

 onMouseOut="draw()" onMouseOver="pull()">')
Gia' provato.... Non ho il risultato sperato.....
e comunque <layer> e' visto da NN6 anche se non benissimo.
Il mio problema era proprio legato alla programmazione javascript pura...
Ti ringrazio comunque.
maxmor

 onMouseOut per NN6.......
<layer id="slidemenubar" onMouseOut="draw()" onMouseOver="pull()">
da qui vengono richiamati gli eventi per Netscape 4.x e 6 .
 So che stilisticamente non e' molto "pulito" usare il layer ma per ora...
Forse cambiero' completamente lo script fra qualche tempo...
Ciao, grazie
maxmor

 Forse cambiero' completamente lo script fra qualche tempo...
guarda che NN6 come IE ignora il tag layer......prova questo e dimmi cosa
vedi.....
<layer name="pippo" bgColor="red" height=100 width=100 top=100
left=100></layer>
te lo dico io, niente ,a meno che il tuo NN6 sia diverso , con NN6.01 il tag
layer non esiste.........cioè esiste come tag come un tag XML tipo <PIPPO>
<PLUTO> etc......ma non come dhtml ...per il quale si usa il div......
andreotta fabiano
 WebMªster ATI POWER s.n.c.
 
andr...@atipower.it
 
http://www.aticommerce.com
  (new  cd-dvd-vhs)
 
http://www.atipower.it
 
http://www.afdsoftware.freeweb.org
 
http://www.jsdir.com

 <PLUTO> etc......ma non come dhtml ...per il quale si usa il div......
In questo modo NN4 lo vede come "layer", Ie lo ignora e NN6 lo vede come
tag xml a cui applicare lo stile assegnato....
quindi ho fatto la cosa giusta partendo dal presupposto sbagliato!
Fosse sempre cosi'!
Per ora mi va bene la soluzione di pippopd che mi ha chiarito anche
qualche dubbio concettuale (come d'altronde il tuo intervento).
Thank you... e buon lavoro
maxmor

...

Scusate della fesseria, ho pensato a <layer> come a document.layers.
Quando non si usa abbastanza la testa prima di parlare, succede.
Ciao
www.gfcarlotti.it
fra...@gfcarlotti.it


Su 
www.jsdir.it
 trovi i tutorial sul DOM di NS6 con proprietą e metodi.
Saluti, Paolo

non e' gia' inizializzato nel foglio di stile?
Purtroppo no.
www.jsdir.com
 -> StaffScript -> Un mondo senza scrollbar per esempio
ti viene detto di mettere le dimensioni, io ho provato a darglieli da
CSS ma non funzia.
See you later...