Горизонтальное выпадающее меню на jQuery

Сегодня я расскажу как легко сделать горизонтальное выпадающее меню на jQuery. В силу его понятности и простоты его можно быстро приспособить к любому дизайну. Например, буквально сегодня, я вставил такое горизонтальное меню в проект на CMS Битрикс. К слову, этот скрипт входит в мою копилку сниппетов.

Html-код меню должен иметь такой вид:

<ul id="jsddm">
    <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 для списка. Итак, нужно выстроить первый уроверь меню в линию, скрыть вложенные уровни и добавить необходимое оформление. На нашем примере это выглядит так:

#jsddm {
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 timeout    = 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

3

Комментариев: 4

  1. В чем преимущество решения на jQuery перед CSS-меню?

    1
  2. Недавно создал блог по скриптах на JQuery. Если кому то будет интересно то вот ссылка — vadyos.org.ua

    3
  3. приведенное меню можно реализовать на чистом css, используя небольшой хак для ie6.

    дополнительный яваскрипт и подключение jquery — избыточное решение.

    4

Оставить комментарий