Наш клиент, вдохновленный 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
... Финальный результат выглядит бесподобно:



