Создание php скриптов различных направлений

Гостевые, новостные движки, а также различные парсеры других ресурсов и прочее. Доработка готовых скриптов, "доводка" их до желаемого, а также расширения функционала.

Разработка Windows приложений

Прикладные приложения: взаимодействие с БД, web службами, генерация отчетов (xls, doc, htm)
Техподдержка разработок на разумных условиях.

Подробнее...

 

Контакты:

  • mail mail@sergebezborodov.com
  • icq 580408949
  • skype sergebezborodov
  • phone +380 66 777 92 25

Создаем простейшее выпадающее меню на JQuery

Наверное невозможно посчитать сколько существует плагинов для JQuery для создания выпадающих меню. Все это свидетельствует о том, что тема достаточно актуальна в веб разработке. В данном посте мы создадим простейшее меню, на примере которого можно понять как работаю более сложные варианты выпадающего меню.

1. HTML

Практически все меню строятся на использовании списков <ul> с <li>.

<ul id="nav">
    <li><a href="#">Parent 01</a></li>
    <li><a href="#" class="selected">Parent 02</a>
        <ul>
            <li><a href="#">Item 01</a></li>
            <li><a href="#" class="selected">Item 02</a></li>
            <li><a href="#">Item 03</a></li>
        </ul>
        <div class="clear"></div>
    </li>
    <li><a href="#">Parent 03</a>
    <ul>
        <li><a href="#">Item 04</a></li>
        <li><a href="#">Item 05</a></li>
        <li><a href="#">Item 06</a></li>
        <li><a href="#">Item 07</a></li>
    </ul>
        <div class="clear"></div>
    </li>
    <li><a href="#">Parent 04</a></li>
</ul>  

<div class="clear"></div>

2. CSS

CSS код меню также не отличается особой сложностью. У нас имеется два стиля для тега <ul> – родительское меню и подменю. Для родительского устанавливаем значение float: left, чтобы располагать элементы на одной строке. Элементы подменю скрываем по умолчанию и будем показывать их лишь только при наведении курсора.

body {font-family:arial; font-size:11px;}
.clear {clear:both}
/* удаляем стили списка по умолчанию */
#nav {
    margin:0;
    padding:0;
    list-style:none;
}     

    /* make the LI display inline */
    /* делаем отображение LI как inline */
    /* позиционирование относительно родителя */
    #nav li {
        float:left;
        display:block;
        width:100px;
        background:#ccc;
        position:relative;
        z-index:500;
        margin:0 1px;
    }  

    /* главное меню */
    #nav li a {
        display:block;
        padding:8px 5px 0 5px;
        font-weight:700;
        height:23px;
        text-decoration:none;
        color:#fff;
        text-align:center;
        color:#333;
    }  

    #nav li a:hover {
        color:#fff;
    }  

    /* можно сделать другой стиль для выделенного меню */
    #nav a.selected {
        color:#f00;
    }  

        /* подменю, скрыто по умолчанию */
        #nav ul {
            position:absolute;
            left:0;
            display:none;
            margin:0 0 0 -1px;
            padding:0;
            list-style:none;
        }  

        #nav ul li {
            width:100px;
            float:left;
            border-top:1px solid #fff;
        }  

        /* display block will make the link fill the whole area of LI */
        /* отображение ссылки в меню как block, чтобы заполнить пространство в LI */
        #nav ul a {
            display:block;
            height:15px;
            padding: 8px 5px;
            color:#666;
        }  

        #nav ul a:hover {
            text-decoration:underline;
        }  

/* ну и классика жанра: IE6 fix */
*html #nav ul {
    margin:0 0 0 -2px;
}

3. Javascript

$(document).ready(function () {   

    $('#nav li').hover(
        function () {
            //показать подменю 
            $('ul', this).slideDown(100);  

        },
        function () {
            //скрыть подменю 
            $('ul', this).slideUp(100);
        }
    );  

});

Для отображения и скрытия элементов используются функции slideUp И slideDown, который можно заменить на другие функции, что подробно описано в документации по JQuery.

Теги: , ,

Категория:Javascript

5 комментариев к “Создаем простейшее выпадающее меню на JQuery”

  • alexpts Says:

    Событие hover лучше вешать не на все элементы списка.
    Я бы написал так.

    $(‘.nav li:has(ul)’).each(function(){
    $(this).hover(function(){
    $(this).children(‘ul’).slideDown(900); },function(){ $(this).children(‘ul’).slideUp(400); });
    });

    Кстати, никогда не видел такой выборки – $(‘ul’, this), можете объяснить подробно как это работает.

  • SB Says:

    $(‘ul’, this) – очень полезная возможность jQuery искать элементы в области заданной второй переменной (в данном случа this), а не во всем документе

    более подробно написано здесь
    http://docs.jquery.com/Core/jQuery#expressioncontext

  • alexpts Says:

    т.е. это эквиваленто $(this).find(‘ul’) но записывается короче?

  • SB Says:

    в приципе да,
    но я использую первый вариант например когда например
    var div = $(‘#maindiv’);
    $(‘a#main’, div).attr(‘bla’, ‘bla bla’);
    $(’span#text’, div).text(‘bla bla’);

    по логике должно быть некоторое ускорение в работе, т.к. элементы ищутся не во всем документе, а только в указанной области.
    Привычка пришла ещё из разработки под windows, но действует ли оно в jquery…

  • alexpts Says:

    Спасибо ) делал замеры, по времени одно и тоже, что первый, что второй вариант. Разницы в производительности не наблюдал. Если она и есть, то несущественная.

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