Выдвигающаяся панель

Сегодняшний урок описывает создание скрытой выдвигающейся панели, используя CSS и Mootools.

1
2
3
4
5
6
<div id="toppanel">
    <div id="slidepanel">
        <!-- Содержимое панели -->
    </div>
    <a href="#" id="toggle">Показать панель</a>
</div>

Мы имеем внешний контейнер #toppanel, который содержит саму панель #slidepanel и кнопку показывающую и скрывающую эту панель.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
*{
    margin:0;
    padding:0;
}
#toppanel{
    position:absolute;
    left:0;
    top:0;
    width:100%
}
#slidepanel{
    background:#E8D7B7;
    border-bottom:3px solid #9C8B7B;
    text-align:right;
    width:100%
}
#toggle{
    font-size:0.75em;
    display:block;
    width:150px;
    height:25px;
    float:right;
    color:#fff;
    text-decoration:none;
    margin-right:30px;
    font-weight:bold;
    background:url(img/toggle.gif) no-repeat left top;
    padding-top:5px;
    text-align:center
}

Стили отвечающие за визуальное оформление вы можете менять по своему вкусу.

Подключаем фреймворк:

1
<script type="text/javascript" src="mootools.js"></script>

И добавляем следующий JS код:

1
2
3
4
5
6
7
8
window.addEvent('domready', function() {
    var myVerticalSlide = new Fx.Slide('slidepanel');
    myVerticalSlide.hide();
    $('toggle').addEvent('click', function(e){
        e.stop();
        myVerticalSlide.toggle();
    });
});

Обсуждение:

  1. Имя

    А чтобы контент сдвигался под панель?

  2. Alex

    Если нужно чтобы контент двигался вместе с панелью, уберите внешний контейнер <div id="toppanel"> ну и стили для него.

  3. Freedom

    Здравствуйте, а как сделать так чтобы данная панель была расположена не по горизонтали а по вертикале. например от левого края страницы и выезжала соответственно по вертикале а не так как сейчас горизонтально сверху.
    Что нужно переделать в скрипте помимо размещения меню для вертикального выезда.

  4. Alex

    Freedom,

    window.addEvent('domready', function() {
        var myHorizontalSlide = new Fx.Slide('slidepanel', {mode: 'horizontal'});
        $('toggle').addEvent('click', function(e){
            e.stop();
            myHorizontalSlide.toggle();
        });
    });
  5. такая панель реализуема не только этим JS-фреймворком.

    мутулс вести 90 Кб
    jQuery — 54 Кб

    разница в 2 раза, удобство то же.

  6. Alex

    Николай, есть сжатая версия 60Кб

  7. Anton

    Приветствую.
    Спасибо, весьма полезная статья, давно искал нечто подобное.
    Вопрос: а как сделать так, что бы панель выезжала не по клику, а при наведении курсора. Соответственно, и сворачивалось, чтобы когда курсор убран.
    Спасибо еще раз не только за эту статью, но и за большенство других!
    Надеюсь, Вы и дальше будете писать/переводить так же «в точку».

  8. Alex

    ANTON, благодарю за пожелания. Постараюсь их оправдать.
    Касаемо вопроса попробуйте следующее:

    window.addEvent('domready', function() {
        var myVerticalSlide = new Fx.Slide('slidepanel');
        myVerticalSlide.hide();
        $('toggle').addEvents({
            'mouseenter': function(){
                myVerticalSlide.toggle();
            },
            'mouseleave': function(){
                myVerticalSlide.toggle();
            }
        });
    });
  9. Roll

    Привет, а подскажите как уменьшить высоту этой панели! нигде не могу найти!

  10. Alex

    ROLL, в этом примере высота зависит от содержимого.

  11. Danila

    Alex 26 августа, 2008 в 13:04
    У меня такой вариант не прокатывает, панелька прячется, но тугл прыгает вниз и при дальнейших нажатиях на него ничего не происходит.

    А как сделать, чтобы панель была ориентирована вертикально на всю высоту страницы и сдвигалась вправо-влево, как бы выезжая слева? Ну и чтобы ширина контента уменьшалась вместе с выездом панельки.

  12. Alex

    DANILA, кроме javascript кода, нужно также стили поменять. По поводу 100-й высоты контейнера уже написано достаточно статей, не поленитесь поискать.

  13. Danila

    А каким образом сменить стили не подскажете?

  14. Alex

    Danila, к сожалению я не знаю что вам нужно в итоге, поэтому не могу написать все стили. По высоте контейнер можно растянуть следующим способом:
    html, body{height:100%}
    div{min-height:100%}

    Для IE6 прописать
    div{height:100%}

    Или поиграйтесь с позиционированием.

    Постараюсь в ближайшем будущем, найти время и написать, как сделать вертикальную панель.

  15. Danila

    Спасибо большое, про растяжение по высоте загуглил уже. Отличная статья, буду ждать не менее хорошую про вертикальную панель! ;)

  16. Tony

    здравствуйте подскажите пожалуйста как реализовать смену картинки в бакгроунде.
    Например панель свернута — стрелка в положении «вниз», панель развернута — стрелка меняется на положение «вверх»
    Сорь за беспокойство.

  17. ViST

    Очень полезная статья, вот решил использовать mootools при разработке своего сайта (для отладки выложу сдесь vistwork.narod.ru)
    Вот только использую его, как выпадающее меню (пока картинка, после будет набор ссылок).
    Вот толко столкнулся со следующей проблемой, при наведении на картинку снизу выплывает меню для этого подраздела сайта, но чтобы навести курсор на выпадающее меню нужно убрать курсор с самой картинки, поэтому пришлось убрать обработчик mouseleave для данной картинки. Теперь нужно сделать, чтобы при наведении на любой элемент главного меню подменю других разделов плавно уезжали (пока только просто hide). В коде прописан myVerticalSlide.toggle() как для выплавания, так и для скрытия меню, есть ли какие нибудь разные функции для скрытия и показа меню?

  18. ViST

    Спасибо я нашел открытие и закрытие myVerticalSlide.slideIn() и myVerticalSlide.slideOut() соответственно. Вот только возникают проблемы:
    1. Если навести на первый объект myVerticalSlide1, то срабатывает myVerticalSlide.slideIn()
    2. А потом резко перевести на объект myVerticalSlide2, то срабатывает myVerticalSlide1.slideOut() и не успевает сработать myVerticalSlide2.slideIn()

    как можно побороть эту проблемму.

  19. ViST

    попробовал фреймворк jQuery куда удобнее и быстрее, начал ваять на нем никаких проблем…. все сразу получилось

  20. NIK

    А у меня панель отображается нормально только на страницах лежащих в корне, если переходим в раздел то она отображается в выдвинутом состояние и уже не убирается в чем может быть причина подскажите

    • Alex

      Видимо скрипт не подключается. Проверьте путь.

  21. shweew

    Анимированное меню на Mootools работает, а Выдвигающаяся панель не хочет почему-то…
    Может глянет кто, в чём косяк.http://demo.minzdravao.ru

    • Швеев

      Сам себе отвечаю: что бы панель работала в Joomla в папке media/system/js переименуйте файл mootools-uncompressed.js в mootools.js. Видаться на распаковывается само…

  22. Medeo

    А какой параметр отвечает за то как глубоко меню будет спрятана за экран?? Что нужно поправить что бы она немного выглядывала сверху?

    • Alex

      Сейчас так и есть. Сам внешний блок панели никуда не скрывается. Задайте ему оформление и отступ снизу.

  23. Alex

    Здравствуйте! А что надо дописать в коде, что бы можно было разместить несколько таких блоков на одной странице?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*