Menu w jQuery

W niniejszym tutorialu stworzymy menu w jquery. Efekt końcowy przedstawia się następująco - demo. Na listingu poniżej przedstawiam kod html.

<ul id="menu">
	<li><a class="h home" href="#">HOME</a><a class="n" href="#">HOME</a></li>
	<li><a class="h portfolio" href="#">PORTFOLIO</a><a class="n" href="#">PORTFOLIO</a>
	<li><a class="h o_nas" href="#">O NAS</a><a class="n" href="#">O NAS</a></li>
	<li><a class="h projekty" href="#">PROJEKTY</a><a class="n" href="#">PROJEKTY</a></li>
	<li><a class="h kontakt" href="#">KONTAKT</a><a class="n" href="#">KONTAKT</a></li></li>
</ul>
Jak widzimy w każdym li mamy po dwa elementy a. Elementy o klasie h będą się pojawiać po najechaniu kursorem myszy na określoną pozycję. W tym samym czasie elementy o klasie n będą zjeżdzać w dół. Wszystko będzie się odbywać za pomocą kilku linijek kodu jquery. Najpierw trzeba jednak napisać styl css.
body {
	background:black;
	color:white;
}
#menu {
	margin:0;
	padding:0;
	height:22px;
	margin:50px auto 0 auto;
	position:relative;
	overflow:hidden;
}
#menu li{
	float:left;
	list-style:none;
}
#menu li a{
	font-size:18px;
	font-family: Arial, Helvetica, sans-serif;
	color:white;
	text-decoration:none;
	padding:0 10px 0 10px;
	position:relative;
}
#menu li a.h{
	color: #339999;
	position:absolute;
	top:-20px;
}
#menu li a.down{
	top:20px;
}
#menu li a.active{
	top:0px;
}
#menu li a.portfolio {
	color:#cc33cc;
}
#menu li a.o_nas {
	color:#3399cc;
}
#menu li a.projekty {
	color:#009933;
}
#menu li a.kontakt {
	color:#cc6600;
}
Kluczowymi fragmentami są style dla następujących elementów
#menu li a.h{
	color: #339999;
	position:absolute;
	top:-20px;
}
#menu li a.down{
	top:20px;
}
#menu li a.active{
	top:0px;
}
Ważne jest tu pozycjonowanie elementów. To na pozycji top będziemy operować w javascripcie. Doczepiamy do elementów li zdarzenie hover. Funkcja obsługująca zachowanie po najechaniu przesuwa element o klasie n (czyli podstawowy) w dół aby go ukryć oraz nadaje mu klasę down. Natomiast element o klasie h przesuwa również w dół do pozycji top: 0px (wcześniej było top: -20px) i nadaje mu klasę active. Funkcja wykonywana po zjechaniu jest bardzo podobna. Jedyną różnicą są animacje przywracające pierwotne pozycje elementów oraz zdejmowanie odpowiednich klas zamiast ich dodawania. Pełny kod javascript poniżej.
$(document).ready(function() {
	$("#menu li").hover(
		function () {
			//po najechaniu na li
			$(this).find('a.n').stop().animate({
				top: '20px'
				}, 400, function() {
				$(this).find('a.n').addClass("down");
			});
			$(this).find('a.n').prev().stop().animate({
				top: '0px'
				}, 400, function() {
				$(this).find('a.n').prev().addClass("active");
			});
		},
		function () {
			//po zjechaniu na li
			$(this).find('a.n').stop().animate({
				top: '0px'
				}, 400, function() {
				$(this).find('a.n').removeClass("down");
			});
			$(this).find('a.n').prev().stop().animate({
				top: '-20px'
				}, 400, function() {
				$(this).find('a.n').prev().removeClass("active");
			});
		}
	);
});