JavaScript -9 Esempi di Menù Menu Ci sono varie tecniche per costruire dei menu. Tutte si basano sulla modifica di proprietà CSS (e.g, top, left, z-index, visibility) di alcuni elementi posizionati La modifica di queste proprietà avviene dopo che si è verificato un evento – mouseover, mouseout, click, … Tecnologie di Sviluppo per il WEB 2 Funzioni comuni: Libreria Introduciamo ora alcune funzioni che possono essere utili in una qualsiasi gestione di menu – getObj • Restituisce un riferimento ad un oggetto – getX, getY, getZ • Restituiscono le coordinate di un elemento posizionabile – muoviA • Sposta un elemento posizionato in una data coordinata Tecnologie di Sviluppo per il WEB 3 Libreria – 1: getObj // restituisce un riferimento all’oggetto il cui ID è // passato come input function getObj(elementID){ if (typeof elementID == "string") return document.getElementById(elementID); else return elementID; } Tecnologie di Sviluppo per il WEB 4 Libreria – 2 //muove un elemento alle coordinate (x,y,z) //x ed y espresse in pixel, z in valore assoluto function muoviA(elementID,x,y,z){ var elemento = getObj(elementID); elemento.style.left = x + "px"; elemento.style.top = y + "px"; elemento.style.zIndex = z; } Tecnologie di Sviluppo per il WEB 5 Libreria – 3 //restituisce la coordinata x di un elemento posizionabile //coordinata interpretata come pixel function getX(elementID){ return parseInt(getObj(elementID).style.left); } //restituisce la coordinata y di un elemento posizionabile //coordinata interpretata come pixel function getY(elementID){ return parseInt(getObj(elementID).style.top); } //restituisce lo z-index di un elemento posizionabile function getZ(elementID){ return parseInt(getObj(elementID).style.zIndex); } Tecnologie di Sviluppo per il WEB 6 Libreria – 4 //setta la visibilità di un elemento a vis function setVisibility(elementID,vis){ var elemento = getObj(elementID); if (vis == true || vis=='visible') elemento.style.visibility = "visible"; else elemento.style.visibility = "hidden"; } //restituisce la visibilità di un elemento function isVisible(elementID) { var elemento = getObj(elementID); return (elemento.style.visibility == "visible") ? true: false; } Tecnologie di Sviluppo per il WEB 7 Libreria – 5 //setta la regione ritagliata (clip region) di un elemento function setClip(elementID,top,right,bottom,left){ var elemento = getObj(elementID); var r = 'rect('+top+'px,'+right+'px,'+bottom+'px,'+left+'px)'; elemento.style.clip = r; } //cambia il tipo di cursore, secondo argomento opzionale function setCursor(cursortype,elementID){ if (elementID==null) document.body.style.cursor = cursortype; else getObj(elementID).style.cursor = cursortype; } esempio Tecnologie di Sviluppo per il WEB 8 Libreria – 6 //restituisce la larghezza della finestra del browser function getWidth(){ var larghezza=null; //Netscape et al. usa window.innerWidth if (window.innerWidth) larghezza = window.innerWidth; //IE usa document.body.clientWidth if (document.body.clientWidth) larghezza = document.body.clientWidth; return larghezza; } Tecnologie di Sviluppo per il WEB 9 Libreria – 7 //restituisce l'altezza della finestra del browser function getHeight(){ var altezza = null; //Netscape et al. usa window.innerHeight if (window.innerHeight) altezza = window.innerHeight; //IE usa document.body.clientHeight if (document.body.clientHeight) altezzza = document.body.clientHeight; return altezza; } Tecnologie di Sviluppo per il WEB 10 Libreria – 8 //setta il colore di sfondo di un elemento function setBackground(elementID, colore){ getObj(elementID).style.background = colore; } //setta il colore di primo piano di un elemento function setColor(elementID, colore){ getObj(elementID).style.color = colore; } Tecnologie di Sviluppo per il WEB 11 Esempio menu I seguenti menu sono stati adattati da esempi del capitolo 5 di The Web Wizard’s Guide to DHTML and CSS Steven G. Estrella Addison-Wesley Tecnologie di Sviluppo per il WEB 12 Menu a scorrimento – 1 DIV slidemenu link DIV collegamenti (175px) DIV controlloMenu Tecnologie di Sviluppo per il WEB 13 Menu a scorrimento – 2 onmouseover menuFocus() onmouseout menuFocus() esempio onclick ApriChiudi() Tecnologie di Sviluppo per il WEB 14 Menu a scorrimento – 3 var StatoMenu = "nascosto"; var menuleft = -175; var x = -175; //coordinate iniziali menu var y = 0; var z = 1; var intervallo = 2; //intervallo di animazione var deltaX = 20; //porzione di menu //mostrata ogni 2 millisecondi Tecnologie di Sviluppo per il WEB 15 Menu a scorrimento – 4 function menuFocus(elementID,stato){ if (stato=='over'){ setCursor("pointer",elementID); setBackground(elementID,"yellow"); } else{ setCursor("auto",elementID); setBackground(elementID,"red"); } } In azzurro le funzioni di libreria Tecnologie di Sviluppo per il WEB 16 Menu a scorrimento – 5 function ApriChiudi() { menuFocus('controlloMenu','out'); if (StatoMenu =="nascosto"){ x=menuleft; //inizio animazione (x = -175) MostraMenu(); }else{ x=0; NascondiMenu(); } } Tecnologie di Sviluppo per il WEB 17 Menu a scorrimento – 6 function MostraMenu(){ if (x < 0){ x = (x + deltaX > 0) ? 0 : x + deltaX; muoviA('slidemenu',x,y,z); var timerID=setTimeout('MostraMenu()',intervallo); } else clearTimeout(timerID); StatoMenu = "mostrato"; } Tecnologie di Sviluppo per il WEB 18 Menu a scorrimento – 7 function NascondiMenu(){ if (x > menuleft){ x = (x - deltaX < menuleft) ? menuleft : x - deltaX; muoviA('slidemenu',x,y,z); var timerID=setTimeout('NascondiMenu()',intervallo); } else clearTimeout(timerID); StatoMenu = "nascosto"; } Tecnologie di Sviluppo per il WEB 19 Menu a discesa – 1 DIV barramenu DIV titolo1/2 DIV menu1/2 150px DIV scelte1/2 Tecnologie di Sviluppo per il WEB 20 Menu a discesa – 2 onmouseover mostraMenu() onmouseout nascondiMenu() link esempio Tecnologie di Sviluppo per il WEB 21 Menu a discesa – 3 <div id=”barramenu”> <div id="menu1" onmouseover="mostraMenu('1')" onmouseout ="nascondiMenu('1')"> <div id="titolo1" class="titolo">Risorse HTML</div> <div id="scelte1" class="scelte"> <a class="menu" href="…">Specifica HTML </a> <a class="menu" href=" …"> Validatore HTML </a> <a class="menu" href="…">Corso HTML</a> </div> </div> ...ANALOGO PER MENU2... </div> Tecnologie di Sviluppo per il WEB 22 Menu a discesa – 4 #barramenu { position:relative; height:1.5em; } .titolo { text-align:center; font-family:sans-serif; font-size:125%; font-weight:bold; padding:0px; border: solid 1px; color:navy; background:#66CCCC; position:absolute; top:0px; left:0px; width:150px; height:1.2em; } Tecnologie di Sviluppo per il WEB 23 Menu a discesa – 5 #menu1 { position:absolute; top:0px; left:0px; } #menu2 { position:absolute; top:0px; left:150px; } .scelte { color:navy; background:#66CCCC; border: solid 1px; position:absolute; top:1.5em; left:0px; width:150px; z-index:8; visibility:hidden; } a.menu { text-decoration:none; display: block; text-indent:0.5em; color:navy; font-family:sans-serif; font-weight:bold; width:150px; } a.menu:hover { background:navy; color:#66CCCC; } Tecnologie di Sviluppo per il WEB 24 Menu a discesa – 6 function mostraMenu(menuID){ setVisibility("scelte"+menuID,"visible"); menuFocus("titolo"+menuID,"over"); } function nascondiMenu(menuID){ setVisibility("scelte"+menuID,"hidden"); menuFocus("titolo"+menuID,"out"); } Tecnologie di Sviluppo per il WEB 25 Menu a discesa – 7 function menuFocus(elementID,stato){ if (stato=='over'){ setCursor("pointer",elementID); setColor(elementID,"#66CCCC"); setBackground(elementID,"navy"); } else{ setCursor("auto",elementID); setColor(elementID,"navy"); setBackground(elementID,"#66CCCC"); } } Tecnologie di Sviluppo per il WEB 26 Librerie per animazioni Esistono varie librerie JavaScript che possono essere utilizzate per animare elementi in una pagina HTML Ad esempio Scriptaculous – http://script.aculo.us/ È intuitiva e facile da usare – Leggetevi i sorgenti... Tecnologie di Sviluppo per il WEB 27 Utilizzo Per implementare un effetto è sufficiente creare un oggetto di tipo Effect ed applicare il metodo che corrisponde all’effetto desiderato Il metodo prende in input – L’ID dell’elemento che vogliamo animare (oppure this) – Opzionalmente dei parametri aggiuntivi per controllare vari aspetti dell'animazione Tecnologie di Sviluppo per il WEB 28 Esempio Applicazione dell’effetto Shake ad un elemento con ID uguale a container – onClick = "new Effect.Shake('container');" – onClick = "new Effect.Shake('container', {duration: 3.0});" Oppure – <div onMouseOut="new Effect.Shake(this)"> ……… </div> ESEMPIO Tecnologie di Sviluppo per il WEB 29 Altro tipo di menu SPAN CLASS=titolo DIV CLASS=riquadro DIV CLASS=contenuto ID=c1 CODICE HTML <div class="riquadro"> <span class="titolo" onMouseOver="over(this);" onMouseOut="out(this);" onClick="ApriChiudi('c1');"> TITOLO RIQUADRO </span> <div style="display:none;" id="c1"> CONTENUTO </div> </div> Tecnologie di Sviluppo per il WEB 31 CSS .riquadro { border: solid blue 1px; position: relative; width:70%; left:15%; right:15%; margin-bottom:20px; font-family:Arial, sans-serif; text-align:justify; background:white; color:black; } .titolo { font-family:Arial, sans-serif; font-weight:bold; padding:1px 3px 1px 3px; border: solid 1px blue; background:blue; color:white; position: relative; top:-10px; left:10px; } Tecnologie di Sviluppo per il WEB 32 Codice Javascript function out(elem) { elem.style.color="white"; elem.style.background="blue"; elem.style.cursor="auto"; } function over(elem) { elem.style.color="blue"; elem.style.background="white"; elem.style.cursor="pointer"; } function ApriChiudi(contenuto) { elem=document.getElementById(contenuto); if(elem.style.display=="none") elem.style.display="block"; else elem.style.display="none"; } Esempio Tecnologie di Sviluppo per il WEB 33 Menù sovrapposti Esempio Tecnologie di Sviluppo per il WEB 34 Menù sovrapposti <DIV id="contenitoreMenu"> <div style="left: 0px; top: 0px; z-index:4;" class="menu" id="menu1"> <ul><li> Link 1 <li> Link 2 <li> Link 3 </ul> <span class="titolo" onclick="mostra(this.parentNode.id)"> Titolo 1</span> </div> Tecnologie di Sviluppo per il WEB 35 Menù sovrapposti <div style="left: 30px; top: 30px; z-index:3;" class="menu" id="menu2"> <ul><li> Link 1 <li> Link 2 <li> Link 3 </ul> <span class="titolo" onclick="mostra(this.parentNode.id)"> Titolo 2</span> </div> Tecnologie di Sviluppo per il WEB 36 Menù sovrapposti <div style="left: 60px; top: 60px; z-index:2;" class="menu" id="menu3"> <ul><li> Link 1 <li> Link 2 <li> Link 3 </ul> <span class="titolo" onclick="mostra(this.parentNode.id)"> Titolo 3</span> </div> Tecnologie di Sviluppo per il WEB 37 Menù sovrapposti <div style="left: 90px; top: 90px; z-index:1;" class="menu" id="menu4"> <ul><li> Link 1 <li> Link 2 <li> Link 3 </ul> <span class="titolo" onclick="mostra(this.parentNode.id)"> Titolo 4</span> </div> </div> Tecnologie di Sviluppo per il WEB 38 Menù sovrapposti: CSS li {list-style:none;} #contenitoreMenu { position:relative; top:30px; left:30px;} div.menu { position: absolute; width:150px; height:200px; font-family:Arial, sans-serif; font-weight:bolder; font-size:14pt; color: white;} span.titolo { position: absolute; bottom:0px; left:0px; right: 0px; width: 150px; height: 25px; padding:1px; padding-left:5px; text-align:left; color:black;} span.titolo:hover { color: white; cursor: pointer; } Tecnologie di Sviluppo per il WEB 39 Menù sovrapposti: Javascript var menuAttivo = "menu1"; var ZIndexMenuAttivo = 4; function mostra(menuClick ) { var menu = document.getElementById(menuClick); if (menuAttivo != menuClick) { // stringhe var elem = document.getElementById(menuAttivo); elem.style.zIndex = ZIndexMenuAttivo; menuAttivo = menuClick; ZIndexMenuAttivo = menu.style.zIndex; menu.style.zIndex = "4"; } } Tecnologie di Sviluppo per il WEB 40 Possibile modifica: 1 L’oggetto associato a <span class="titolo" SPAN ha il onclick="mostra(this.parentNode.id)"> metodo mostra Titolo 1</span> sostituito da <span class="titolo" onclick="mostra()"> Titolo 1</span> ------------------------------------------------------------------------function mostra(menuClick) {…} sostituito da function mostra() { var menuClick = this.parentNode.id; …} Esempio Tecnologie di Sviluppo per il WEB 41 Possibile modifica: 2 Registrazione eventi <body onload= " registraEventiSpan(); settaStileMenu(4,0,0,30,30);"> function registraEventiSpan() { var span = document.getElementsByTagName("span"); var numSpan = span.length; for(var i=0; i<numSpan; i++) if(span[i].className == "titolo") span[i].onclick = mostra; } Esempio Tecnologie di Sviluppo per il WEB 42 Registrazione stile function settaStileMenu(numMenu, origineX, origineY, dx, dy) { var posizioneX = origineX; var posizioneY = origineY; for(var i=1; i<=numMenu; i++) { var div = document.getElementById("menu"+i); div.style.zIndex = numMenu - i + 1; div.style.left = posizioneX + "px"; div.style.top = posizioneY + "px"; posizioneX += dx; posizioneY += dy; } } Eliminiamo style="left: 0px; top: 0px; z-index:4;" Tecnologie di Sviluppo per il WEB 43 Scambio menù var menuAttivo = "menu1"; function mostra() { var menuClick = this.parentNode.id; if (menuAttivo != menuClick) { tmpMenu = menuAttivo; menuAttivo = menuClick; var menu = document.getElementById(menuClick); var zIndexMenuClick = menu.style.zIndex; //salviamo i dati var leftMenuClick = menu.style.left; //del menu su cui var topMenuClick = menu.style.top; //abbiamo cliccato menu.style.zIndex = "4"; //spostiamo il menu su menu.style.left = "0px"; //cui abbiamo cliccato menu.style.top = "0px"; //come primo menu Tecnologie di Sviluppo per il WEB 44 Scambio menù // il menu che compariva al primo posto adesso deve comparire // al posto di quello su cui abbiamo cliccato var menuDaSpostare = document.getElementById(tmpMenu); menuDaSpostare.style.zIndex = zIndexMenuClick; menuDaSpostare.style.left = leftMenuClick; menuDaSpostare.style.top = topMenuClick; } } Tecnologie di Sviluppo per il WEB 45
© Copyright 2024 ExpyDoc