Menu a comparsa laterale con jQuery

Di Davide De Maestri - gleenk  //  Archivio Articoli, jQuery  //  6 Commenti

Attraverso l’uso della funzione animate() di jQuery è possibile, con poche righe di codice, sperimentare soluzioni creative e carine per il nostro sito web. Una di queste è la possibilità di realizzare un menù a comparsa/scomparsa laterale che si apre solamente al passaggio del mouse sulla sporgenza della nostra linguetta. Il risultato che vogliamo ottenere è il seguente:

Come possiamo vedere l’effetto, ovviamente adattato e aggraziato è molto carino e poco invasivo! Vediamo ora come strutturare il nostro markup:

Il codice HTML

<ul id="navigation">
	<li><a href="#" class="voce1"></a></li>
	<li><a href="#" class="voce2"></a></li>
	<li><a href="#" class="voce3"></a></li>
	<li><a href="#" class="voce4"></a></li>
</ul>

Tutto qua, una semplice lista di navigazione contenente dei link. Non serve nient’altro! Nel caso dell’esempio abbiamo utilizzato una classe per ogni link per poter associare ad ognuno di essi un’immagine dei background diversa. Tuttavia la soluzione sicuramente più elegante e pulita è quella di utilizzare gli sprites css (se volete sperimentare un modo alternativo di usare gli sprites potete dare un’occhiata qui!).
PS: ricordatevi di includere la libreria jQuery all’interno del tag !

Il codice CSS

body{
	background:#fff;
	font-family: Arial, Helvetica, sans-serif;
	margin:0;
	padding:0;
}
ul#navigation {
    position: fixed;
    margin: 0px;
    padding: 0px;
    top: 10px;
    left: 0px;
    list-style: none;
    z-index:9999;
}
ul#navigation li {
    width: 100px;
}
ul#navigation li a {
	text-decoration:none;
    display: block;
    margin-left: -2px;
    width: 60px;
    height: 40px;  
	font-size:16px;
	font-weight:bold;
    background-color:#fff;
    background-repeat:no-repeat;
    background-position:center center;
	background-repeat:no-repeat;
	border-radius:0px 10px 10px 0px;
    -moz-border-radius:0px 10px 10px 0px;
    -webkit-border-bottom-right-radius: 10px;
    -webkit-border-top-right-radius: 10px;
    -khtml-border-bottom-right-radius: 10px;
    -khtml-border-top-right-radius: 10px;
	border:1px solid #ccc;
}
.voce1 {background: url(blue_monster_happy.png)}
.voce2 {background:url(green_monster_angry.png)}
.voce3 {background:url(red_monster_angry.png)}
.voce4 {background:url(yellow_monster_happy.png)}

E’ tutto piuttosto semplice, la maggior parte delle proprietà servono solo a fini stilistici! L’unica nota di merito va fatta alla scelta di usare il position:fixed. Questa ovviamente è una scelta che deve essere valutata e ponderata in base al progetto, non sempre vorremo infatti vedere il nostro menù sempre ancorato alla pagina! E’ bene però tener conto che un menù a comparsa laterale che “sparisse” causerebbe non pochi problemi di navigazione ai nostri poveri utenti!

Lo script jQuery

$('#navigation a').stop().animate({'marginLeft':'-50px'},1000);
	$('#navigation > li').hover(
		function () {
			$('a',$(this)).stop().animate({'marginLeft':'-7px'},200);
		},
		function () {
			$('a',$(this)).stop().animate({'marginLeft':'-50px'},200);
		}
	);

Come possiamo vedere il trucco si svela molto rapidamente. Attraverso la funzione animate facciamo in modo che appena la pagina viene caricata il menù si sposta a sinistra di 50px (così l’utente ha il tempo di vedere meglio che c’è, ma potremmo tranquillamente rimuovere questo parametro!). Al passaggio del mouse sopra un elemento della lista invece il margine sinistro diminuisce fino a -7px, così la nostra linguetta sporge in fuori (ad una velocità di 200 millisecondi). Quando usciamo dalla linguetta questa rientrerà nella posizione di partenza (il margine torna a -50px). Ed il gioco è fatto! La funzione .stop() permette di impedire che si sovrappongano animazioni e permette quindi di terminare l’animazione iniziata prima di eseguirne un’altra (visivamente non sembrerà così ma… provate a toglierla e vedrete le vostre linguette ondeggiare liberamente senza sosta!).
Nota: il simbolo “>” è un selettore CSS che serve per indicare l’elemento figlio. Per un approfondimento vi rimando a questo articolo. Buona sperimentazione!

PPS: Non imitate mai il sistema ad iframe che ho utilizzato per mostrarvi l’esempio in pagina mi raccomando :D !

Altri articoli che potrebbero interessarti

  1. Semplice menu a tendina dropdown con jQuery
  2. Effetto Easing su menù con jQuery UI
  3. Un semplice menù a tendina con Jquery
  4. Border Radius CSS3 – Come arrotondare i bordi
  5. Tabs di navigazione con jQuery
Webdesign Feed Rss
  • Fra

    Ciao, è giusto quello che mi serviva, ma ho un piccolo problema.

    Il menu mi resta statico, cioè non fa l’effetto indicato da te nel demo. Ho importato la libreria scaricata da jQuery UI, quindi il file 1.6.2.min.js e 1.8.16.custom.min.js, ma anche la libreria generica. 

    Però nulla. Se ne resta fermo lì. Cosa ho sbagliato? 

    • http://www.gleenk.com/ Davide De Maestri

      Ciao Francesca,
      prova a guardare il sorgente (e salvarti la pagina) http://www.gleenk.com/demo/jquery/menu-comparsa-laterale/ e vedere se riesci a risolvere. Così su 2 piedi senza avere un link non saprei in che altro modo aiutarti :) Fammi sapere se hai risolto mi raccomando!

  • Andrea

    Bello!! L’ho allienato a destra ma non riesco a fargli fare il movomento contrario: cioè in modo che le tendine che compaiano da destra verso sinistra.
    Che istruzioni devo modificare?

    • Anonimo

      Ciao! Per prima cosa assicurati di avere portato jquery in locale ehehe, meglio premetterlo sempre… Poi…
      Nel css a ul#navigation devi mettere right: 0px invece di left:0px, a livello grafico cambia l’arrotondamento dei bordi, e nel jquery invece metti il primo valore di marginLeft a -7px, il secondo a -40px ed il terzo di nuovo a -7px. Fammi sapere se funziona ;)

  • Mac10

    non riesco a farlo funzionare! c’è altro che devo inserire?

    • Anonimo

      Che cosa non funziona esattamente? Hai un link da mostrare così posso controllare ;) ?

Davide De Maestri - DMSDVD86L27F704W

Privacy Policy