29 messaggi dal 26 gennaio 2002
Ciao a tutti,
premetto che non conosco bene javascript.
Qualcuno mi potrebbe aiutare a decifrare questo script?

la funzione viene richiamata in questo modo
onMouseOver="MM_showHideLayers('menu','','show')"

e le funzioni interessate sono queste

function MM_findObj(n, d) { //v4.0
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 )&&d.all)
{ x=d.all ;
}
for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i] ;
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_showHideLayers() { //v3.0
var i,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;
}
}


L'effetto che realizza è quello che fa aprire un sottomenu rendendo visibile una parte di codice html che sta dentro i tag <div> che hanno un id che è "menu" e nello style ha l'attributo nascosto.

<div id="menu" style="position:absolute; top:233px; width:152px; height:54px; z-index:auto; left: 114px; visibility: hidden">

siccome volevo utilizzare uno script del genere volevo capire come funziona; inoltre in questo modo la posizione del sottomenu è fissa (come si vede nel <div>) e quello che volevo cercare di fare era calcolare in maniera automatica la posizione del sottomenu (in base magari alla posizione della voce del menu principale)

spero di essere stato chiaro e che qualcuno mi voglia aiutare....:-)
ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
beh... quel codice non è molto incoraggiante, probabilmente è stato generato da dreamweaver e per me li fa sempre troppo ingarbugliati.

Se vuoi qualcosa di più semplice puoi provare a scriverlo da nuovo, ti basta sapere come modificare la visibilità delle celle e la loro disposizione. Innanzitutto parti da questo:

<div id="menu" style="position:absolute; top:233px; width:152px; height:54px; z-index:auto; left: 114px; visibility: hidden">

hai una cella che si chiama "menu" e che ha posizione assoluta. L'attributo visibility:hidden la rende nascosta. Puoi crearti una funzione che imposti queste caratteristiche a tuo piacimento. Ad esempio ne faccio una con 4 parametri:

function imposta_menu (visibile, left, top, contenuto){
// questo primo pezzo ti assicura (dovrebbe) la
// compatibiltà con netscape
if (document.getElementById()){
tabella = document.getElementById("menu")
} else {
tabella = document.all.menu
}

tabella.style.visibility = visible
tabella.style.left = left
tabella.style.top = top
tabella.innerHTML = contenuto
}


Così puoi richiamare questa funzione e disporre istantaneamente la tabella come più ti piace:

contenuto = "<a href=\"http://www.aspitalia.com\">Clicca per il sito di Aspitalia</a>"
imposta_menu("show", 300, 200, contenuto)

Questo renderà visibile la tabella, la posizionerà sulle coordinate 300,200 e come contenuto mostrerà il link ad aspitalia.

Enjoy learning and just keep making
29 messaggi dal 26 gennaio 2002
ti ringrazio sei stato chiarissimo; vorrei farti però un'ultima domanda.
Io ho sulla sinistra un menu fatto più o meno così:

<table>
<tr>
<td>
voce1
</td>
</tr>
<tr>
<td>
voce2
</td>
</tr>
....
</table>

c'è un modo per recuperare la posizione di voce1 in modo tale così da impostare la cella nascosta accanto a voce1?

posizione cella nascosta=posizione voce1 +grandezza voce1

grazie
ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
se la tabella non ha posizione assoluta non puoi sapere direttamente in che coordinate si trova la cella. Anzi... penso che le proprietà top e left siano peculiarità della tabella e non delle singole celle. Però puoi provare ad arrangiarti in uno di questi tre modi:

- apri il tuo sito normalmente e premi in tasto Stamp (Print Screen). Questo genererà una cattura a video che puoi incollare in un qualsiasi programma di grafica. Adesso controlla manualmente a quanti pixel di distanza dai bordi si trova la cella, segnati queste coordinate e inseriscile nella funzione. Es:
imposta_menu ("show", 150, 300, contenuto)

-oppure puoi calcorare la posizione della cella in modo dinamico "consultando" la posizione del mouse al momento del click. Allora hai bisogno di aggiungere questa funzione:
<script language="Javascript">
function coords() {
Xpos = window.event.x + document.body.scrollLeft;
Ypos = window.event.y + document.body.scrollTop;
}
</script>
<body onMouseMove="Javascript:coords()">
ad ogni spostamento del mouse, le variabili Xpos e Ypos verranno aggiornate così che quando chiami:
imposta_menu ("show", Xpos, Ypos, contenuto)
la tabella assumerà le coordinate della freccetta del mouse. Se vuoi, puoi anche evitare di mettere Xpos dato che la larghezza della tua tabella dovrebbe essere conosciuta... non so saranno 150 pixel...

- terzo e ultimo metodo: rendi la tabella a sinistra anch'essa assoluta. Invece di usare il metodo comune:
<table><tr><td>... ecc..
fai:
<div id="voce1" style="position:absolute; top:233px; left: 0px">Voce1</div>
<div id="voce2"style="position:absolute; top:263px; left: 0px">Voce2</div>
così saprai esattamente dove si trova ogni cella.
Sulla div ci puoi aggiungere questo script:
onClick="Javascript:imposta_menu("show", this.style.width, this.style.top)"

-oppure ancora, ce ne aggiungo un'altro, fai come la maggiorparte dei menu a tendina: lasci fissa la tabella a sinistra ma costruisci più div a posizione assoluta, una per ogni voce della tabella fissa. In questo modo il contenuto delle div sarà prestabilitò, non dovrai cambiarlo dinamicamente. La posizione pure è stabilita, infatti devono rimanere al loro posto, non devono muoversi. L'unica cosa che cambia è la visibilità. A questo punto butta via la funzione imposta_menu() e costruiscine un'altra:
function mostra_div(quale){
document.getElementById("voce1").style.visibilty = "hidden"
document.getElementById("voce2").style.visibilty = "hidden"
document.getElementById("voce3").style.visibilty = "hidden"
// insomma le nascondi tutte, e poi mostri quella passata come parametro
document.getElementById(quale).style.visibilty = "show"
}
sulle div metti questo:
onClick="Javascript:mostra_div(this.id)"

Scegli la soluzione che più ti piace... ripensadoci l'ultima ti crea meno problemi di "posizione", ciao!


Enjoy learning and just keep making
29 messaggi dal 26 gennaio 2002
sei un pozzo di scienza!!!
comunque grazie, stasera faccio qualche prova e tifaccio sapere
ciao
11.886 messaggi dal 09 febbraio 2002
Contributi
ma che... ho solo qualche migliaio di ore lavorative (non retribuite) sul groppone, beh, alla prossima ^__^

Enjoy learning and just keep making
29 messaggi dal 26 gennaio 2002
sto provando ad utiizzare il metodo delle cordinate del mouse ma non mi riconosce le variabili Xpos e Ypos, come mai?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.