22 июля 2008 ~ 27 Комментариев

Меню «Гаражные двери»

garagemenuexample

Очень красивое меню, реализованное при помощи Jquery, сравнимое только с меню реализованными на флеше.

Это меню работает за счет изменения background-position наложенных друг на друга слоями изображений.

И так, начнем.

Для начала, нам потребуется задний фон(нижний слой):

menu-background-example

Изображение той самой « гаражной двери»(средний слой):

shutter-template

И изображение «дверного проёма(верхний слой):

 window 

Создадим сам каркас меню на html:

<ul id="menuback">
     <li class="shutter" id="shutter1"><a class="link" href="#1">Ссылка 1</a></li>
     <li class="shutter" id="shutter2"><a class="link" href="#2">Ссылка 2</a></li>
     <li class="shutter" id="shutter3"><a class="link" href="#3">Ссылка 3</a></li>
     <li class="shutter" id="shutter4"><a class="link" href="#4">Ссылка 4</a></li>
</ul>

При отключенном css или javascript, меню будет выглядеть как обычный список ссылок, то есть еще будет выполнять свою главную функцию.

Оформим меню при помощи css:

*                     { margin:0px; padding:0px; }
body                    { background:#c1c1c1; }
a                     { outline-style: none; }

ul#menuback {
     margin: 50px auto;
     list-style: none;
     background: url(../images/menu-bg.jpg);
     width: 800px;
     overflow: auto;
}

ul#menuback li.shutter {
     width: 200px;
     height: 100px;
     display: block;
     float: left;
}

ul#menuback li#shutter1 {
     background: url(../images/shutter-africanplains.jpg) no-repeat;
}
ul#menuback li#shutter2 {
     background: url(../images/shutter-reptiles.jpg) no-repeat;
}
ul#menuback li#shutter3 {
     background: url(../images/shutter-aviary.jpg) no-repeat;
}
ul#menuback li#shutter4 {
     background: url(../images/shutter-arcticzone.jpg) no-repeat;
}

a.link {
   width: 200px;
   height: 100px;
   display: block;
   background: url(../images/window.png) no-repeat bottom center;
   text-indent: -9999px;
}

И, наконец, дадим ему жизнь при помощи jQuery.

Сам по себе jQuery не может полноценно работать с позицией фона в css, так что мы используем маленький однокилобайтный плагин к нему.

<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="js/jquery.backgroundPosition.js"></script>

<script type="text/javascript">
     $(document).ready(function() {

          //Set css in Firefox (Required to use the backgroundPosition js)
          $('#shutter1').css({backgroundPosition: '0px 0px'});

          //Animate the shutter
          $(".link").hover(function(){
                $(this).parent().animate({backgroundPosition: '(0px -100px)'}, 500 );
              }, function() {
                $(this).parent().animate({backgroundPosition: '(0px 0px)'}, 500 );
          });
      });
</script>

Обновление: в ie6 меню работает некорректно из-за неправильной обработки прозрачности у png изображений.

Для исправления этого глюка используем следующий css код(извиняюсь если использовал это хак неправильно):

<!--[if lt IE 7]>
<style type="text/css">
a.link {
   filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/window.png', sizingMethod='scale');
   background: url(images/blank.gif) no-repeat bottom center;
}
</style>
<![endif]-->

Результат нашей работы вы можете посмотреть или скачать(вместе с исходниками изображений) ниже.

Спасибо за внимание!

Посмотреть результат(демо)

Скачать исходники

Источник(Английский)

27 Комментариев для “Меню «Гаражные двери»”

  1. Миша Абасов 22 июля 2008 at 12:49 Permalink

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

  2. Евгений 22 июля 2008 at 13:33 Permalink

    А как насчет прозрачности png в ie6?

  3. Я собственной персоной 22 июля 2008 at 13:43 Permalink

    А как насчет прозрачности png в ie6?

    Сейчас попробую исправить.

  4. Афорист 22 июля 2008 at 14:24 Permalink

    Уташыл в закрома

  5. adw0rd 22 июля 2008 at 14:51 Permalink

    Красота! Спасибо! :)

  6. 1999 22 июля 2008 at 15:55 Permalink

    Прочел первые 10 страниц Вашего блога на одном дыхании
    Просто потрясающе. За такие блоги и люблю интернет :)
    Спасибо Вам и Хабру! Буду читать дальше

    PS: не понравилась одан вещь- при комментировании нужно обязатеьно указывать свой ящик. Не понимаю этого.

  7. meowth 22 июля 2008 at 15:57 Permalink

    Одна проблема – если поводить мышкой секунд несколько по всем 4м – влево-вправо, а потом убрать мышь, то «ворота» продолжа.т еще секунд 10-15 хлопать створками – видимо, следует еще после каждого цикла «открыл-закрыл» проверять, находится ли мышь в пределах элемента, и если нет – отменять анимацию (что-нть типа $(this).parent().stopAnimate)

  8. Миша Абасов 22 июля 2008 at 15:58 Permalink

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

    Одна проблема – если поводить мышкой секунд несколько по всем 4м – влево-вправо, а потом убрать мышь, то «ворота» продолжа.т еще секунд 10-15 хлопать створками – видимо, следует еще после каждого цикла «открыл-закрыл» проверять, находится ли мышь в пределах элемента, и если нет – отменять анимацию (что-нть типа $(this).parent().stopAnimate)

    ;)

  9. pilot34 22 июля 2008 at 16:06 Permalink

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

  10. Я собственной персоной 22 июля 2008 at 17:05 Permalink

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

    Именно. Я тоже придерживаюсь этой позиции.
    Если пользователь играется с этой багой, пусть себе радуется (-:

  11. -=Vovan=- 22 июля 2008 at 21:28 Permalink

    Классная вещ. Спасибо!

  12. Zer0CooL 22 июля 2008 at 21:36 Permalink

    Вот ЭТО РЕАЛЬНАЯ ТЕМА ! спасибки !

  13. rozumny 23 июля 2008 at 0:18 Permalink

    Насчет быстрого курсора

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

  14. Я собственной персоной 23 июля 2008 at 1:04 Permalink

    Насчет быстрого курсора

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

    Это легко переписывается. И это не флэш.

  15. rozumny 23 июля 2008 at 4:29 Permalink

    Это легко переписывается. И это не флэш.

    я о том же, кому надо тот перепишет :-)

  16. ert2 28 июля 2008 at 3:23 Permalink

    Красиво, но не знаю где такое применить.

  17. Ольга [Бормотуха] 28 июля 2008 at 11:57 Permalink

    Очень забавная фича! Спасибо!

  18. unicod 8 августа 2008 at 2:03 Permalink

    как я рад, что наткнулся на этот сайт! менюжка «Гаражные двери» – это офигенная тема. обязательно реализую на своем авто сайте. блин офигенный сайт!

  19. Станислав 15 декабря 2008 at 18:37 Permalink

    а как расширить на больше чем 4 окна?

  20. Дмитрий 10 сентября 2009 at 22:40 Permalink

    Красиво!!!! Спс!

  21. Volodyaka 16 октября 2009 at 17:22 Permalink

    спасибо мне очень помог

  22. Galla 22 октября 2009 at 14:40 Permalink

    да просто супер

  23. WERER 6 ноября 2009 at 4:04 Permalink

    Есть ещё сайт по раздвижным пластиковым дверям porta-door.narod.ru отличный сайт.

  24. sergey 22 декабря 2009 at 1:54 Permalink

    Зе бест!
    классно.
    тоже забамблю чтонить.

    п.с. а у меня фамилия тоже чернев.. :)

  25. peter 17 апреля 2010 at 1:19 Permalink

    Если много раз мышкой поводить около этого эелемента, то будет долго колбасить)

    Чернеев опять перевёл очередную статью(

  26. peter 17 апреля 2010 at 1:20 Permalink

    *если это он написал)))

  27. peter 17 апреля 2010 at 1:20 Permalink

    тьфу ты чернёв, сори


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