Создание эффектной навигации

Дата публикации:Апрель 9, 2011

Наш клиент, вдохновленный Flash, ведет свой бизнес, связанный с переработкой и повторным использованием материалов, списанных разнообразными космическими корпорациями. Клиент хотел бы, чтобы панель навигации сайта была представлена в футуристическом (и, одновременно, ретро) стиле. Согласно словам самого заказчика, «панель должна обладать гладкой анимацией и включать в себя наш логотип\иконку ракеты в качестве указателя».

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

Для начала нам понадобится захватить контур космического корабля с логотипа компании. Этот контур будет использоваться нами в качестве указателя для меню. Сделать это можно с помощью InkScape:

Теперь выполним поворот ракеты, добавим к ней тень и afterburn блеск, чтобы придать ей некоторую живость:

Сохраним изображение в формате .png с прозрачностью. Его ширина будет составлять 37 пикселей. Далее, нам понадобится подготовить таблицу стилей нашей темы к подключению созданного фонового изображения. С помощью jQuery мы создадим div с идентификатором #shipSlide, поэтому необходимо заранее определить для него необходимые стили:

...
#shipSlide{
  position: absolute; margin-top: 12px; margin-left: -7px;
    width: 37px; height: 20px; 
  background: url(images/spaceship-icon.png) no-repeat;
}
...  

Теперь мы можем приступить к работе с jQuery. Для начала нам нужно удостовериться, что jQuery подключен к теме, и что файл custom-jquery.js готов к работе. Это обязательное условие для выполнения всех наших проектов, связанных с jQuery, поэтому мы не будем снова заострять на данной процедуре внимание. Помимо всего прочего, нам понадобятся плагины Color и Easing. Поскольку Color поставляется вместе с WordPress, зарегистрировать его не представляет никакого труда. Плагин Easing придется загружать и подключать к теме вручную. Скачать Easing можно с сайта http://gsgd.co.uk/sandbox/jquery/easing/.

Применим к навигации небольшие усовершенствования с помощью jQuery:

...
      //добавляем #shipSlide div
      //сразу после div с классом .menu-header
         jQuery('.menu-header').prepend('<div id="shipSlide"> </div>');
         
      //снижаем прозрачность #shipSlide div до 40%
       jQuery('#shipSlide').fadeTo('slow', 0.4); 
...

Проверим результат нашей работы:

Отлично, теперь установим основную анимацию, которая будет сдвигать объекты вправо li.page_item на 35 пикселей от их первоначального значения отступа. Мы будем использовать функцию .hover() для того, чтобы создать необходимый эффект наведения курсора мыши на объекты li.page_item:

...
      jQuery('li.menu-item')
      .hover(function() {
      //сдвигаем каждый пункт меню вправо
      jQuery(this).animate({paddingLeft: '+=25px'}, 400, 'swing');
      
      //переопределяем фоновый цвет при наведении курсора мыши
      jQuery(this).find('a').css('background','none');
      
      //описываем вдижение ракеты
      
      }, function(){
      
      //возвращаем пункт меню в его первоначальное положение
      jQuery(this).animate({paddingLeft: '-=25px'}, 400, 'swing');
      
      
        });//end hover
...  

Наконец, внутри первой функции hover, над цветовой анимацией объекта, мы добавим следующий фрагмент кода, который будет выполнять перемещение объекта #shipSlide к позиции li.item_page:

...
//задаем произвольное перемещение ракеты
      var p = jQuery(this);
      var position = p.position();
      jQuery("#shipSlide").fadeTo('slow', 1)
        .animate({marginLeft: position.left-175},
          {duration: 600, easing: 'easeOutBack', queue: false});
...

Мы установили переменную position и использовали функцию .position(), чтобы получить массив с информацией от объектов li.page_item.

Функция анимации объекта #shipSlide изменяет значение отступа marginLeft изображения на число position.left-175. Также в предыдущем фрагменте кода мы устанавливаем параметр queue в false и используем метод динамики easeOutBack, который становится доступным благодаря подключению плагина Easing.

Последний штрих: нам осталось выполнить перемещение ракеты на начальную позицию. Поместим следующий jQuery код над всем остальным кодом навигации:

...
  jQuery('.menu-header').hover(function(){
      jQuery("#shipSlide").fadeIn(1000);
    }, function(){
      jQuery("#shipSlide").fadeTo('slow', .4)
        .animate({marginLeft: '-5px'},
          {duration: 600, easing: 'easeOutBack', queue: false});
    });//end hover
... 

Финальный результат выглядит бесподобно:

Поделиться

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

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

Получать новые комментарии по электронной почте. Вы можете подписаться без комментирования.