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");
});
}
);
});
