
Сегодня я расскажу как легко сделать горизонтальное выпадающее меню на jQuery. В силу его понятности и простоты его можно быстро приспособить к любому дизайну. Например, буквально сегодня, я вставил такое горизонтальное меню в проект на CMS Битрикс. К слову, этот скрипт входит в мою копилку сниппетов.
Html-код меню должен иметь такой вид:
<li> <a href="#">JavaScript</a>
<ul>
<li><a href="#">Выпадающее меню</a></li>
<li><a href="#">jQuery</a></li>
<li><a href="#">Ajax</a></li>
</ul>
</li>
<li> <a href="#">Эффекты</a>
<ul>
<li><a href="#">Slide эффект</a></li>
<li><a href="#">Fade эффект</a></li>
</ul>
</li>
<li><a href="#">Навигация</a></li>
<li><a href="#">HTML/CSS</a></li>
<li><a href="#">Помощь</a></li>
</ul>
Теперь CSS. Вся прелесть данного скрипта в минимальном использовании селекторов. Фактически, нужен всего лишь ID для списка. Итак, нужно выстроить первый уроверь меню в линию, скрыть вложенные уровни и добавить необходимое оформление. На нашем примере это выглядит так:
margin: 0;
padding: 0;
}
#jsddm li {
float: left;
list-style: none;
font: 12px Tahoma, Arial;
}
#jsddm li a {
display: block;
background: #20548E;
padding: 5px 12px;
text-decoration: none;
border-right: 1px solid white;
width: 70px;
color: #EAFFED;
white-space: nowrap;
}
#jsddm li a:hover {background: #1A4473;}
#jsddm li ul {
margin: 0;
padding: 0;
position: absolute;
visibility: hidden;
border-top: 1px solid white;
}
#jsddm li ul li {
float: none;
display: inline;
}
#jsddm li ul li a {
width: auto;
background: #9F1B1B;
}
#jsddm li ul li a:hover {background: #7F1616;}
А вот и сам скрипт. Обработчики событий привязываются к элементам LI. При наведении на пункт меню скрываем предыдущий открытый вложенный список (если виден) и открываем новый. Когда курсор убираем — ждем 500мс и закрываем список.
var closetimer = 0;
var ddmenuitem = 0;
function jsddm_open()
{ jsddm_canceltimer();
jsddm_close();
ddmenuitem = $(this).find('ul').css('visibility', 'visible');}
function jsddm_close()
{ if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');}
function jsddm_timer()
{ closetimer = window.setTimeout(jsddm_close, timeout);}
function jsddm_canceltimer()
{ if(closetimer)
{ window.clearTimeout(closetimer);
closetimer = null;}}
$(document).ready(function()
{ $('#jsddm > li').bind('mouseover', jsddm_open)
$('#jsddm > li').bind('mouseout', jsddm_timer)});
document.onclick = jsddm_close;
Как видите, все действительно просто, а главное кроссбраузерно: IE6+, Firefox 1.5+, Opera 8+, Safari 3+, Chrome 0.2+
Смотрите ДЕМО.
За скрипт спасибо Javascript Array
В чем преимущество решения на jQuery перед CSS-меню?
Это просто еще один способ
Недавно создал блог по скриптах на JQuery. Если кому то будет интересно то вот ссылка — vadyos.org.ua
приведенное меню можно реализовать на чистом css, используя небольшой хак для ie6.
дополнительный яваскрипт и подключение jquery — избыточное решение.