JavascriptProva

martedì 28 febbraio 2012

Creazione di un embrione di sottomenu con uno script mio

Ufff... Finalmente ci sono riuscito! Come esercizio preparatorio alla creazione di menu, prendendo alcuni spunti da quel terribile script che sto cercando di capire, ho iniziato a esercitarmi nella creazione di nuovi DIV affiancati a DIV già esistenti, nella posizione voluta rispetto a quella di questi ultimi.
Ecco lo script mio:
<html>
<head>
<style>
#mainMenu{
 position:absolute;
 width:200px;
 height:300px;
 top:100px;
 left:100px;
 background-color:green;
 border:10px solid brown;
}
.subMenu{
 position:absolute;
 width:100px;
 height:100px;
 top:50px;
 left:20px;
 background-color:cyan;
 border:5px solid yellow;
}
</style>
<script>
function Posizione(obj){
 var curleft=0;
 var curtop=0;
 do {
  curleft+=obj.offsetLeft;
  curtop+=obj.offsetTop;
 } while(obj=obj.offsetParent);
 return {X:curleft, Y:curtop};
}

function main(){
 mainMenu=document.getElementById("mainMenu");
 subMenu=document.getElementById("subMenu");
 mainMenu.onclick=Crea;
}

function Crea(){
 nuovo=document.createElement("div");
 nuovo.style.left=Posizione(mainMenu).X+mainMenu.offsetWidth;
 nuovo.style.top=Posizione(mainMenu).Y+mainMenu.offsetHeight/3;
 nuovo.className="subMenu";
 document.body.appendChild(nuovo);
}


window.onload=main;

</script>
</head>
<body>
<div id="mainMenu">
 
</div>

</body>
</html>
Notevole la funzione Posizione(obj), che ricava la posizione di un oggetto anche qualora questo sia contenuto in un altro oggetto, sommandone la posizione relativa all'oggetto "genitore" con la posizione dell'oggetto "genitore" stesso e così via via anche qualora l'oggetto sia contenuto in una scatola cinese di altri oggetti.

In questo mio script l'oggetto nuovo viene creato (al click) affiancato al precedente, a un'altezza pari a un terzo di quella dell'oggetto precedente stesso.

Che faticaccia! Però soddisfacente!

Nessun commento:

Posta un commento