Каждый пользователь, который осваивает работу в Фотошопе рано или поздно начинает интересоваться, как в таком графическом редакторе вырезать волосы. Рассмотрим более эффективные способы вырезания для объектов, у которых сложные контуры.

Уточнение края

Вообще-то вырезать волосы с помощью Фотошопа на фотографии не составит большого труда, но здесь может возникнуть сложность с выделением волос и их детальностью и точностью. Чтобы решить такую проблему в рассматриваемом графическом редакторе с версии CS5 появился инструмент для уточнения края. Такая функция расположена на панели настройки инструментов справа вверху. Благодаря рассматриваемой функции можно использовать любое выделение. Учитывая общепринятое мнение, что с новой версией Фотошоп становится более совершенным, сейчас будет рассмотрено, как в версии CS6 с помощью инструмента уточнения края вырезать волосы.

Сначала выделяют объект с использованием функции быстрого выделения или другим подходящим для определенного изображения способом. Далее после нажатия кнопки уточнения края переходят в диалоговое окно настроек параметров для контура выделения. В данном диалоговом окне выбирают режим просмотра с указанием предпочтительного варианта для отображения между объектом и фоном границы. Выбор режима просмотра является индивидуальным правом каждого пользователя программы, но в ситуации вырезания волос работать в Фотошопе будет удобно в черно-белом режиме.

Чтобы обнаружить края в рассматриваемой программе предусматриваются две настройки. В диалоговом окне быстрого выделения для вырезания волос рекомендуется использовать функцию Smart Radius («Умный радиус»). После определения Фотошопом характера выделения будет его корректировка. В настройке Radius («Радиус») определяется размер ширины площади влияния инструмента. Радиус имеет зависимость от разрешения изображения и детальности контура.

Для детализации какого-нибудь участка выделения на изображении берут кисточку инструмента уточнения края и после того когда будет задан нужный радиус в главном окне инструмента проводят кисточкой вдоль определенного отрезка контура. В таком процесс не требуется особой точности, сама программа занимается корректировкой точности. Если возникает необходимость упрощения излишних детализированных фрагментов, применяют инструмент ластик. В окошке Output To («Вывод в) имеются несколько вариантов результата. В случае вырезания волос на изображении следует выбрать «Выделение».

Чтобы разделить объект с фоном следует использовать функцию по очистке цвета Decontaminate Color («Очистить цвета»). Такой инструмент используется при обнаружении бахромы вокруг краев выделения, которые остаются от цветных пикселей. Для регулирования количества краевых пикселей используется ползунок Amount («Эффект»).

Использование цветных каналов

В Фотошопе есть такой способ для вырезания волос, где не нужно обращаться к штатным инструментам выделения. К такому способу относятся цветовые каналы изображения, к тому же данный способ более предпочтителен в варианте со сложными объектами, например как волосы. Цветовые каналы изображения находятся на вкладке панели слоев Channels («Каналы»). Рассматриваемый метод выделения определяет, также обрабатывает и выделяет наиболее контрастные по отношению к выделяемому объекту каналы. Контрастным каналом часто бывает синий канал, который очень хорошо подходит к объектам как мех, шерсть, волосы и прочее.

После выбора канала делают его копию, после этого добиваются максимального черного цвета по отношению к осветленному фону объекта с использованием функций, которые отвечают за коррекцию яркости и контрастности. В зависимости от изображения можно применить в коррекции яркости и контрастности настройки с использованием «Уровня» и «Кривых». Но в большинстве случаях отличные результаты получаются, если использовать корректирующий слой Channel Mixer («Микширование каналов»).

В диалоговом окне по микшированию каналов с помощью регулировки ползунков отвечающих за красный, зеленый и синий цвет достигается на осветленном фоне объекта достаточное затемнение, но для этого должна стоять галочка на функции монохромный. После достижения требуемого результата с помощью горячих клавиш Ctrl+A выделяют изображение и в меню по редактированию выбирают команду по копированию. После этого на вкладке каналы создают новый альфа канал, и при этом сохраняется выделенная область в новом канале.

Далее выделяют сохраненное выделение и с помощью Ctrl+V вставляют содержимое из буфера обмена программы, потом снимают с помощью Ctrl+D выделение и переходят в панель по изображению и коррекции где выбирается команда уровни. В уровнях усиливают контраст и по необходимости подчищают изображение с использованием черной и белой кисти убирают лишнее. Чтобы выделить все белое с нажатием клавиши Ctrl щелкают мышкой по миниатюре альфа канала. Далее переходят на вкладку, отвечающую за слои и удаляют корректирующий слой, потом с помощью клавиши Delete удаляют фон изображения. Также бывают случаи, когда под изолированные объекты, если есть на это необходимость, подкладывают различные фоны. А чтобы контур откорректировать используют команду функции по обработке слоев в меню слои.

Извлечение объекта

В случае если требуется быстрое выделение в Фотошопе можно воспользоваться в меню Filter («Фильтр») командой Extract («Извлечь»). После клика мышкой по данной команде откроется диалоговое окно, в котором расположены инструменты по созданию контура с настройками, которые отвечают за его параметры. В таком диалоговом окне главным инструментом является выделитель краев (Edge Highlighter) и он расположен слева сверху. После задания толщины мазка инструментом по выделению краев замыкая контур, обводят объект.

Если будет необходимость, то с помощью инструмента ластика можно будет подправить линию, также с помощь клавиши Ctrl +/- можно будет приблизить или отодвинуть объект. Чтобы отменить действия можно воспользоваться клавишей на клавиатуре Ctrl + Z. После того как будут выполнены определенные действия по выделению в программе указывают что необходимо будет удалить а что оставить. Для этого используют инструмент, отвечающий за заливку объектов Fill Tool и, кликнув мышкой внутри контура объекта, заливают его. А если не получится попасть внутрь контура, то можно удалить объект, но вернуть данный объект можно с помощью функции отмена действий на верхней панели рабочего окна программы или с помощью клавиш Ctrl + Z. После того как контур будет залит в диалоговом окне завершают процедуру с помощью кнопки Ok.

Использование маски

Чтобы оперативно выделить и вырезать объект из фоновой основы используют быструю маску (Quick selection tool). Иконка быстрой маски расположена в низу панели инструментов. Изображение чтобы выделить в режиме черной маски обрабатывают черной кистью, но перед этим регулируют размер кисти, ее жесткость, также силу нажима и непрозрачность.

Использование инструментов «Перо» и «Палец»

После того как разобрались с вырезанием волос в программе Фотошоп. Не помешает узнать, как в данной программе делать наращивание волос, потому что приведенные две задачи могут быть взаимосвязаны. Некоторые пользователи программы при работе с прическами на изображениях чтобы не вдаваться в детали профиля используют контур для объектов, при этом они обращаются к инструментам как Pen Tool («Палец») и Smudge Tool («Перо»). И если есть в этом задача, то с помощью таких инструментов делают восстановление исходного контура до самого волоска на изображении. Здесь самое главное чтобы в волосах, которые были включены в контур выделения, фон не просвечивался.

Чтобы обработать контур изображения и создать выделение нужно будет, с помощью правой клавиши мыши щелкнуть ей по команде по образованию выделенной области. Дальше выделенную область с помощью Ctrl+J копируют на новый слой и делают уменьшение непрозрачности основного изображения. Для того чтобы использовать такое изображение в качестве трафарета применяют инструмент «Палец» и занимаются с помощью такого инструмента восстановлением на дубликате оригинального профиля. При этом манипулируют настройками инструмента по его размеру и жесткости кисти. Научившись пользоваться инструментом «Палец» можно на изображении легко обработать массивные волосы.

Иногда в работе с фотоколлажем нам просто необходимо вырезать волосы. Притом с неоднородного фона.

Что ж, давайте попробуем вместе справиться с этим непростым заданием!

Выбор фотографии

Нам понадобится фото большого размера (2000-3000 пикселей по короткой стороне), желательно исходник. Это необходимо для хорошего конечного результата. А вот маленькие изображения лучше вообще не использовать.

Итак, мы будем работать с фотографией этой девушки:

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

Вырезаем изображение девушки

При помощи инструмента Lasso Tool (Лассо) выделяем образ девушки, чтобы убрать лишнее. Далее используем сочетание клавиш CTRL + J или правую кнопку мышки по изображению и пункт Layer via Copy (копировать на новый слой).


Затем отключаем нижний слой:


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

В нашем случае это Красный канал (Red).


Щелкаем правой кнопкой мышки по красному каналу и выбираем Duplicate Channel (дублирование).


Используем для этого канала команду Image - Apply Image.


Увеличиваем контрастность

Чтобы вырезать волосы в фотошопе мы должны усилить контрастность изображения. Это можно сделать с помощью Кривых (Curves): Image - Adjustments - Curves . Таким образом, мы максимально увеличиваем контрастность, делаем фон как можно темнее, а волосы - светлее.


Затем используем кисть белого цвета, Opacity (Непрозрачность) 100%. Будем закрашивать белым область, с волосами, которые нужно вырезать.

Будьте осторожны с краями - старайтесь закрасить только ту область, которая точно будет вырезана. Еще можно осторожно закрасить на фоне черным цветом то, что мешает и точно не нужно вырезать.


Чтобы еще больше увеличить контрастность, мы осветляем светлые части и затемняем темные. При этом обращаем внимание на границы черного и белого.

Воспользуемся инструментом Burn Tool (Затемнение) . Выберите в панели инструментов Shadows (Тени) и затем осторожно начинайте водить по фону и волосам. Только проверьте параметр Exposure - если нужные нам волоски станут затемняться, то потребуется уменьшить значение. Следите за тем, чтобы все необходимое оставалось белым.


Дальше поработаем с инструментом Dodge Tool (Осветление). В панели инструментов мы выбираем Светлые тона (Highlights) , и тем самым осветляем светлые части и затемняем темные, делая их более контрастными. Рекомендую особенно тщательно проработать края, границы белого и черного.


Получаем промежуточный результат

Теперь инвертируем изображение с помощью команды Ctrl + I . Не забудьте проверить волосы, и если надо - еще раз пройтись по ним инструментом Burn .


Все, можно загрузить выделение, кликнув по иконке канала с зажатой клавишей Ctrl.




Нажимаем клавишу Delete, и вуаля - получаем следующую картинку:


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


Мы неплохо поработали с волосками. Однако кое-где аккуратно вырезать не получилось. Остались кусочки фона. А в некоторых местах волосы окрашены в цвет исходного фона.


Так что теперь нужно довести дело до ума!

Убираем все лишнее

И сделаем мы это при помощи следующих манипуляций.

Сначала постараемся Ластиком стереть все лишнее. А вот с проблемными местами мы поступим иначе. Выделим нужный кусок волос, перенесем на новый слой (Ctrl + J), а затем снова возвратимся в палитру каналов. Далее повторяем весь алгоритм еще раз.

Выбираем этот кусочек волос. Для него подходит Синий (Blue) канал.


Проходим весь процесс заново, и получаем вот что:


Теперь нужно загрузить выделение (Ctrl + клик по иконке канала), и нажать Delete . В результате у нас будут четко выделенные волоски.


Вот что получилось в итоге:


Наводим лоск

Обрабатываем волоски

Согласитесь, вырезать волосы в photoshop не так-то и просто. Но уверены, у вас все получится. Просто надо навести порядок.

Волоски излишне окрасились в цвета первоначального фона? Давайте обработаем их с помощью мягкой Кисти : поставьте режим Color на панели инструмента, Opacity примерно 60-70%.

Я начну выделения с нижней части фотографии в районе плеча, точнее, руки женщины. Обратите внимание, я провожу контур по внутреннему краю ее руки. Инструмент "Уточнить край" работает лучше, если Вы создаёте контур несколько внутри вырезаемой фигуры:

По мере движения вверх я добрался до волос женщины, на этом участке также следует оставаться близко к краю, но следует заботится о том, чтобы избегать захват любых областей, где сквозь ее волосы просвечивает серый фон. Я просто стремлюсь выбрать основную часть волос, о мелочах несколько позже позаботится инструмент "Уточнить край":

Закончите обводку и завершите контур, при этом он превратится в выделение.

Шаг 2: Работа с инструментом "Уточнить край" (Refine Edge)

Перед работой инструментом следует убедиться в том, что в палитре слоёв выбран нужный слой, в моем случае, это верхний слой с оригинальным фото:

Для активации данного инструмента Photoshop следует пройти по вкладке главного меню Выделение --> Уточнить край (Select --> Refine Edge). Но, т.к. у меня на данный момент активен инструмент "Прямолинейное лассо", то кнопка "Уточнить край" отображена панели параметров, и мне достаточно её нажать:

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

Режимы отображения (View Mode)
После активации инструмента Вы видите, что изображение изменилось. Выделенная область осталась, но под ней появился белый фон (это отображение задано по умолчанию). Все зависит от того, какой режим просмотра в данный момент выбран в верхней части диалогового окна. Справа от слова "Вид" (View) имеется иконка, отображающая активный на данный момент режим просмотра.

Если нажать на саму иконку либо на маленькую стрелку справа неё, откроется список различных режимов просмотра. Для дальнейшей работы я выберу режим "На слоях" (On Layers), и мой документ примет следующий вид:

Шаг 3: Увеличить значение радиуса

Прямо под опцией Режимы отображения (View Mode) в диалоговом окне инструмента "Уточнить Край" находится раздел под названием "Обнаружение краев" (Edge Detection). Это просто волшебный инструмент. Чтобы добавить обрезанные волосы к выбранной области, переместите ползунок вправо:

Как только Вы начнёте перемещать ползунок, то сразу увидите, что начала появляться часть волос, которая была за пределами вашего первоначального выделения:

Так что же здесь происходит? Какое значение следует задавать радиусу при выборе? Попытаемся разобраться. Справа от иконки выбора режима просмотра эскизов вы увидите опцию "Показать радиус" (Show Radius), которая по умолчанию отключена. Кликните по флажку, чтобы включить её:

При включённой опции в окне документа отображается только этот радиус. Смысл работы инструмента "Уточнить край" заключается в том, что он анализирует вид края нашего первоначальный выделения, чтобы решить, какой еще часть изображения должна быть присоединена к нему, а радиус и определяет значение того, как далеко она будет распространятся от первоначального края выделения. Photoshop не показывает это по всему документу, а отображает только указанную зону. Вот почему значение данного радиуса измеряется в пикселях. Если мы устанавливаем значение радиуса, скажем, в 50 пикселей, то Photoshop покажет 50 пикселов в любом направлении от первоначального края выделения, чтобы мы могли определить, есть ли какие-либо элементы в этой области, которые следует включить в наш выбор.

В рабочем окне документа показывается только сам радиус, остальные области отображены чёрным. На рисунке показан радиус со значение 45 пикс:

Умный Радиус (Smart Radius)

Далее возникает вопрос, а какое значение следует задать радиусу обнаружения краёв? С одной стороны, он должен быть достаточно велик, чтобы затронуть все нужные участки, но, с другой, слишком большая величина радиуса может привести к проблемам в сопредельных областях. И ещё неприятный нюанс, в данный момент радиус нормальный для участка с волосами, но в то же время он слишком велик для области с рукой и плечом женщины, и, кроме того, он может появляться в областях, где его присутствие мне не нужно вообще:

Попросту говоря, область волос нуждается в широком радиусе, а в других областях он должен быть значительно меньше.
Именно здесь приходит на помощь Умный Радиус или Smart Radius, переключатель которого находится прямо над главным ползунок радиуса. По умолчанию, Smart Radius выключен. Я кликнуть на его флажок для включения:

Давайте посмотрим на действие включенного Умного радиуса. Как сказано выше, мне требуется, чтобы в области волос радиус был большим, а в области плеча и руки - маленьким. Если мы посмотрим в моем окне документа, мы видим, что Photoshop сделал именно это. У нас имеется по-прежнему широкий радиус вокруг волос, и в то же время радиус вдоль рук и плеча значительно сузился:

Прежде чем мы продолжим, маленькое замечание об Умном радиусе. В зависимости от вашего изображения и типа края, с которым Вы работаете, Smart Radius может помочь, но также и может сделать хуже. Смарт-радиус следует применять для выделения, которое содержит различные типы краёв, как в моем случае. Если же, к примеру, выбрать только одни волосы, и больше ничего, или выбрать только гладкие края и ничего больше, то вы, вероятно, обнаружите, что в данных случаях лучше оставить Умный радиус отключённым.

Для изменения размера радиуса имеются и другие способы, и мы их сейчас рассмотрим.

В этой статье мы рассмотрим основы анимации в jQuery , чтобы вы могли использовать её в разработке сложных страниц. Анимация – это базовая функциональность интерактивных элементов веб-дизайна.

Дизайн веб-сайта играет главную роль в привлечении посетителей на постоянной основе. Интерактивный дизайн привлекает больше внимания по сравнению с обыкновенным статичным дизайном.

Технологии улучшаются быстрыми темпами, чтобы удовлетворить потребности современного веб-дизайна. В результате CSS3 предлагает реализацию анимации без помощи JavaScript. И хотя CSS3 и HTML5 постоянно улучшаются, jQuery остаётся популярным методом создания интерактивного дизайна.

Давайте приступим!

Практическое использование анимации в jQuery

jQuery широко используется для разработки интерактивных элементов, таких как слайдеры, меню, скроллеры и другие. До того, как мы перейдём непосредственно к анимации, я предлагаю вам взглянуть на следующие практические примеры реализации, иллюстрирующие мощь анимации в jQuery.

  • Боковое скольжение при прокрутке ;
  • Слияние рамок изображений с помощью jQuery ;
  • Анимация «Ночные сны» ;
  • Анимация открытия занавеса с помощью jQuery ;
  • Создание раздвигающегося меню навигации с помощью jQuery .

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

Скачать исходные коды Демонстрация

Введение в основы анимации в jQuery

Большинство дизайнеров имеют понятие об основах работы с кодом jQuery или JavaScript. Изменение видимости элемента – распространённая задача, которая встречается почти на всех веб-сайтах.

Мы можем просто скрыть/отобразить элемент, используя CSS атрибуты display или visibility . jQuery упрощает процесс, представляя две функции hide и show . Рассмотрим следующий код для отображения и скрытия HTML элемента.

$("#panel").show(); $("#panel").hide();

При помощи приведённого кода элемент появляется и исчезает мгновенно. Пройдя по следующей ссылке, вы можете увидеть демонстрацию этого примера: http://jsfiddle.net/nimeshrmr/bMmFS/

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

  • Растворение – реализует процесс постепенного растворения элемента HTML, изменяя его свойство opacity;
  • Скольжение – реализует постепенное расширение/сжатие элемента HTML, изменяя его высоту.

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

Растворение

Растворение обычно реализуется с помощью функций fadeIn и fadeOut . Значение свойства opacity элемента увеличивается функцией fadeIn и уменьшается функцией fadeOut . Мы также можем передать временной интервал растворения, как показано в следующем примере:

$("#panel").fadeIn("slow"); $("#panel").fadeOut("fast");

У нас есть возможность выбрать предопределённые значения slow и fast в качестве интервала времени. Также мы можем передать число миллисекунд, чтобы определить длительность анимации. Вот ссылка с демонстрацией этого примера:
http://jsfiddle.net/nimeshrmr/zcRzL/

Скольжение

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

При этом slideUp используется для скрытия, а slideDown для отображения элементов. Следующий код показывает основной способ использования функций скольжения:

$("#panel").slideDown("slow"); $("#panel").slideUp("fast");

Параметр продолжительности также работает схожим с функциями растворения образом. Демонстрация использования функций скольжения приведена по следующей ссылке:
http://jsfiddle.net/nimeshrmr/nDz6J/

Приступаем к работе с функцией jQuery Animate

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

В общем случае, анимация создаётся изменением значений атрибутов CSS. После того, как вы освоитесь с jQuery функцией animate , построение сложной анимации станет простой задачей. Давайте начнём с рассмотрения шаблона функции animate:

$("#panel").animate({ // Свойства и значения CSS }, 5000, "linear", function() { // Обработка завершения анимации });

Этот код иллюстрирует шаблон использования функции animate . Первый параметр содержит все свойства и значения CSS.

Следующий необязательный параметр определяет длительность анимации. Третий параметр определяет способ растягивания (тип анимации), а последний параметр определяет анонимную функцию, вызываемую при завершении анимации.

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

Анимация частей изображения

В этом разделе мы посмотрим на то, как можно отобразить изображение, применив анимацию к отдельным его частям. Сначала нам нужно разделить изображение на несколько маленьких. Вы можете использовать технику разделения изображений, представленную в этой статье: «Создание головоломки, используя jQuery и PHP ».

Вот изображение, которое мы будем использовать для анимации:

В исходных кодах к этой статье вы найдёте 12 изображений, получившихся после разделения. Каждое изображение будет иметь размеры 150 на 150 пикселей. Они разделены на два ряда по 6 штук. Все 6 изображений каждого ряда будут расположены в правом углу страницы, используя следующий код:

Здесь приведены 12 изображений, расположенных в два ряда при помощи двух классов CSS img_item и img_item2 . Теперь посмотрим на код CSS для позиционирования изображений:

Img_item{ position: absolute; right: 0px; opacity:0; top:0; } .img_item2{ position: absolute; right: 0px; opacity:0; top:150px; }

Согласно приведённому выше коду все изображения в каждом ряду будут скрыты и расположены поверх друг друга, используя абсолютное позиционирование. Теперь мы можем посмотреть на код jQuery для генерации изображения с помощью анимации:

$(document).ready(function(){ var left = 0; $(".img_item").each(function(i,val){ $(this).animate({ left: left, opacity: 1 }, 1500); left += 150; }); left = 0; $(".img_item2").each(function(i,val){ $(this).animate({ left: left, opacity: 1 }, 1500); left += 150; }); });

Итак, у нас есть два селектора для отбора элементов классов img_item и img_item2 . Затем мы применяем функцию animate к отдельным элементам, чтобы плавно изменить значение свойства opacity на 1, а свойство left изменяем относительно положения предыдущей части изображения. По сути, анимация будет применена ко всем частям изображения одновременно, и в результате получится нечто подобное:


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

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

Разработка последовательности эффектов

В предыдущем примере анимация применялась ко всем элементам сразу после загрузки страницы. Но иногда нам нужно применять эффекты последовательно, когда анимация каждого элемента начинается после завершения анимации предыдущего элемента. Итак, попробуем загрузить то же самое изображение, используя последовательность эффектов. Начнём с HTML кода:

Единственное отличие от предыдущей версии – использование одного класса CSS вместо двух классов для рядов. Эта реализация сгенерирует ряды, используя код jQuery, вместо их жёсткого кодирования с помощью CSS классов.

Код CSS для реализации этого примера будет таким же, как и в предыдущем случае. Теперь посмотрим на код jQuery для создания последовательности эффектов:

$(document).ready(function(){ var left = 0; var items = $(".img_item"); animateImg(items,0,0,0); });

После загрузки страницы мы выбираем все элементы изображения, используя класс img_item . Затем мы передаём эти элементы в функцию animateImg для создания анимации. Следующий код демонстрирует реализацию функции animateImg :

var indexNum = 1; var animateImg = function(items,left,height,indexNum){ if(items.length >= indexNum){ var item = items.get(indexNum); $(item).animate({ left: left, top: height, opacity: 1 }, 1500 ,function() { left += 150; indexNum++; if(indexNum % 6 == 0){ left = 0; height += 150; } animateImg(items,left,height,indexNum); }); } };

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

Изначально эти два значения устанавливаются в 0, чтобы расположить изображение в верхнем левом углу экрана. Четвёртый параметр – это порядковый номер изображения для разделения их по рядам.

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

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

В этом примере у нас два ряда по 6 изображений в каждом. Поэтому мы используем деление по модулю порядкового номера, чтобы проверить, не достигли ли мы конца ряда. В этом случае мы увеличиваем значение top для следующего изображения, чтобы динамически создавать ряды.

Наконец мы рекурсивно вызываем функцию animateImg , чтобы осуществить перебор всех элементов и сгенерировать полную картинку. Следующее изображение демонстрирует последовательность эффектов в действии.


Здесь вы найдёте демонстрацию предыдущего примера.

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

Цепочки эффектов

До сих пор мы создавали по одному эффекту для каждого элемента. В более сложных задачах нам потребуется соединить несколько эффектов для каждого элемента в цепочку. Поэтому давайте изменим предыдущий пример, добавив цепочки эффектов.

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

Вступление

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

Шаг 1. Основы jQuery

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

Обычная строка кода, выглядит следующим образом:

$(DOM Element).something();

Давайте разберем каждую часть:

  • $ — Сокращение для объекта jQuery. Если вы одновременно используете несколько фреймворков на одной странице, вместо знака $, воспользуетесь сокращением jQuery: jQuery(DOM Element).something();
  • (DOM Element) – Элемент, с которым вы собираетесь что-то сделать. Это одна из ключевых особенностей jQuery. Вы можете использовать CSS-селекторы для получения нужного элемента. Любые селекторы, работающие в CSS-файле, могут быть использованы здесь. ID, классы, псевдо-классы, все что угодно.
  • .something() – То, что вы хотите сделать с полученным элементом. Это может быть все что угодно от простого скрытия элемента до создания AJAX-запроса к обработчику события.

Сегодня мы рассмотрим только анимацию, и эффекты, связанные с ее функциональностью.

Шаг 2. Использование встроенных эффектов

jQuery предоставляет большое количество встроенных методов, которые вы можете использовать прямо из коробки. Это методы для отображения/скрытия элементов, с различными вариациями, включающими скольжение элемента и изменение его прозрачности. Вы также можете использовать ряд методов toggle , которые переключают видимость элемента.

Прежде чем мы рассмотрим каждый из этих методов, посмотрите на основной формат вызова каждого метода:

$("#element").effect();

Выше представлена основная парадигма jQuery, сначала мы получаем необходимый элемент, используя CSS-селекторы. Далее, мы просто вызываем любой из встроенных методов.

Несмотря на то, что большинство методов можно вызвать без параметров, часто возникает необходимость настроить их функциональность. Каждый из методов принимает как минимум два параметра: speed и callback .

speed – определяет продолжительность анимации в секундах. Вы можете передать в качестве значения одно из ключевых слов: slow, normal или fast; или задать время в миллисекундах.

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

  • show /hide – Методы для отображения и скрытия элемента. Принимают в качестве параметров speed и callback.
  • toggle – Метод, манипулирующий с отображением элемента, в зависимости от текущего состояния элемента. То есть если он скрыт, то отображает его и наоборот. Использует методы show и hide.
  • slideDown /slideUp – Вполне очевидные методы. Изменяя высоту элемента, создается скользящая анимация, отображающая или наоборот скрывающая элемент.
  • slideToggle – Практически то же самое что и метод toggle, за исключением того, что здесь используются методы slideDown/slideUp, для отображения/скрытия элемента.
  • fadeIn /fadeout – Изменение прозрачности элемента, для создания эффекта затухания.
  • fadeTo – Изменяет прозрачность элемента в соответствии с переданным значением. Как нетрудно догадаться, он принимает дополнительный параметр opacity, где 0 это полная прозрачность, а 1 полная непрозрачность.

В качестве дополнительной функциональности, метод toggle , может принимать в качестве параметра выражение, решающее отображать элемент, или прятать.

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

$("li").toggle($(this).hasClass("effect"));

Проще говоря, функция toggle проверяет выражение, переданное ему в качестве параметра, и если оно истинно, то он переключает видимость элемента. Выражение, которые мы передали, в примере, проверяет наличие у элемента определенного класса.

Шаг 3. Создание собственной анимации

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

Чтобы создать персональный анимационный эффект, вам понадобится метод animate . Это выглядит следующим образом:

$("#somelement").animate({property: value}, );

Метод animate весьма похож на любые другие методы тем, что используется точно так же. Мы получаем элемент, и затем передаем ему некоторые параметры. Принимаемые параметры – это то, в чем метод animate отличается от готовых эффектов.

Параметры speed и callback выполняют те же функции, что и в предыдущих методах. Объект со свойствами, состоящими из определенного количества пар ключ/значение – то, что делает этот метод уникальным. Вы передаете каждое свойство, которое хотите анимировать, вместе с финальным результатом. Например, предположим, вы хотите анимировать изменение ширины элемента, на 90% от его текущего значения. Это можно сделать следующим образом:

$("#somelement").animate({width: "90%"}, 350, function(){ alert ("The animation has finished running."); });

Указанный пример кода, анимирует изменение ширины на 90%, а затем выдает сообщение, что анимация завершена.

Заметьте, что вы не ограничены в количестве. Вы можете добавить анимацию большому массиву свойств, включая прозрачность, поля, отступы, рамки, размеры шрифтов. Метод animate , удобен еще и потому, что может работать с любыми единицами измерения. Пиксели, ems, проценты – все работает. Так что, даже, представленный ниже, запутанный пример кода, будет работать. Правда выглядеть будет не очень понятно.

$("#somelement").animate({ width: "90%" fontSize: "14em", height: "183px", opacity: 0.8, marginTop: "2cm", marginLeft: "0.3in", borderBottom: "30mm", }, 350, function(){alert ("The animation has finished running.");});

При указании свойства, состоящего из нескольких слов, оно записывается без тире, и первая буква второго слова должна быть заглавной. Такая запись значительно отличается от привычного синтаксиса CSS, поэтому обязательно постарайтесь это запомнить. Например, свойство border-top , следует записывать borderTop .

Обратите внимание : jQuery позволяет анимировать только числовые значения свойств. Это значит, что вы не сможете анимировать цветовые свойства, используя только jQuery. Но все не так плохо. С небольшой помощью jQuery UI, вы сможете добавить анимацию цвета очень легко.

Шаг 4. Настройка эффекта

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

Самый простой способ решить эту проблему – использовать метод stop , непосредственно до начала анимации. Этот метод отлично очищает очередь, и анимация выполняется в обычном режиме.

Например, это ваш обычный код:

$("#someelement") .hover(function() { $(this).animate({ top: 20 }, "fast"); }, function() { $(this).animate({ top: 0 }, "fast"); });

Используя метод stop для предотвращения лишних повторений анимации, ваш новый код будет выглядеть вот так:

$("#someelement") .hover(function() { $(this).stop().animate({ top: 20 }, "fast"); }, function() { $(this).stop().animate({ top: 0 }, "fast"); });

Очень просто, правда? Но этот метод имеет одну небольшую проблему. Быстрые движения не приводят к повторяющемуся эффекту, но за это приходится расплачиваться неполной анимацией. Если вы хотите полностью решить эту проблему, вам понадобится плагин наподобие hoverFlow .

Шаг 5. Добавление реализма – Easing

Если хотите добавить чуть больше реализма, вам понадобится дополнительный контроль над скоростью, с которой выполняется анимация. Вот здесь нам на помощь приходит easing. Easing контролирует ускорение и замедление анимации по времени.

Метод, который easing использует по умолчанию, называется swing , он встроен в базовый функционал jQuery. Плагин Роберта Пеннера easing , позволит вам использовать несколько различных эффектов.

Существует только одно предостережение, когда речь идет об использовании персональных эффектов easing: вы можете использовать их только вместе со специальными эффектами анимации, то есть, с методом animate() . После того, как вы подключили плагин, использовать любой метод easing очень просто, передав его в качестве параметра:

$("#somelement").animate({ width: "90%" height: "183px", }, 550, "easeInElastic");

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

Шаг 6. Поднимаемся на ступеньку выше – jQuery UI

Апгрейд до jQuery UI приносит нам ряд необходимых функций. Фактически, для использования дополнительных функций, вам не потребуется полная библиотека. Для получения нужной функциональности, вам потребуются встроенные эффекты. Не само ядро UI, только файл со встроенными эффектами, который весит около 10 килобайт.

Наиболее важными функциями, которые предоставляет библиотека эффектов jQuery UI, является поддержка анимации цветов, easing и переходы классов.

Если помните, я уже говорил, что в jQuery анимацию можно применить только к числовым значениям. С jQuery UI об этом ограничении можно забыть. Теперь вы легко сможете анимировать фоновый цвет элемента, цвет рамки и тому подобное. Кроме того, вместо того чтобы создавать отдельные функции для новых возможностей, jQuery UI просто расширяет базовый функционал animate . То есть, если вы включили библиотеку в свою страницу, то можете использовать обычный метод animate , и он сделает всю грязную работу за вас.

Например, если вы хотите анимировать цвет рамки элемента, при наведении, то ваш код будет выглядеть следующим образом:

$(".block").hover(function() { $(this).animate({ borderColor: "black" }, 1000); },function() { $(this).animate({ borderColor: "red" }, 500); });

Переходы классов отвечают за анимацию между классами. При использовании базовой библиотеки jQuery, если вы удаляете, а затем добавляете класс, изменяющий внешний вид элемента, то это происходит мгновенно. Когда в вашем распоряжении имеется библиотека UI, вы получаете возможность передавать дополнительные параметры, управляющие скоростью анимации, метод easing и callback . Эта функциональность, как и предыдущие, является надстройкой над существущим API jQuery, облегчающей процесс перехода.

Шаг 7. Создание первого, настоящего эффекта

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

Предположим, нам нужно отобразить картинку, внутри которой будут появляться две секции, при наведении мыши. Верхняя секция будет содержать заголовок картинки, нижняя – ее краткое описание. Я знаю, что вы можете найти огромное количество различных плагинов, которые делают то же самое, но сегодня мы сделаем это с нуля. Это не так сложно, как кажется. Фактически, это очень просто и делается довольно быстро. Давайте начнем.

HTML

Для начала нам понадобится HTML-основа

Анимация с JQuery для начинающих Простой пример использования

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

Анимация использует easing, для создания большей привлекательности.

ThemeForest Сайт, где вы найдете множество шаблонов и тем CodeCanyon Сайт, содержащий множество скриптов и примеров кода.

Для этого эффекта, нам нужно продумать структуру каждого элемента. Каждый элемент будет заключен в div, с классом item . Внутри дива, будет размещено три элемента: картинка, и два дива, содержащих название и описание картинки.

Остальные части довольно простые. Нам понадобится подключить на страницу библиотеку jQuery, jQuery UI и файл, содержащий наш персональный код. Помните, что нам необходимы только эффекты jQuery UI, если вы хотите включить больше эффектов, вам понадобится специальная сборка, скачать которую можно здесь.

Вот так будет выглядеть наша страница на этом этапе.

CSS .item { position: relative; margin: 20px 60px 40px 0; overflow: hidden; } .item .title, .item .desc { background: #000; color: #fff; position: absolute; display: block; width: 638px; opacity: 0.4; } .item .title { top: 0; font-size: 16px; padding: 12px 10px 25px 0; text-align: rightright; } .item .desc { bottom: 0; font-size: 12px; padding: 5px 0 15px 10px; }

Здесь есть несколько моментов, на которые вам стоит обратить внимание. Каждому элементу установлено свойство position в значение relative , для того чтобы внутри этого элемента легко было расположить другие. Также, блокам назначено свойство overflow: hidden , с тем, чтобы мы могли скрывать название и описание картинки снаружи, когда они не нужны.

Блокам, которые содержат название и описание, установлено свойство position: absolute , так что они точно позиционируются внутри блока с картинкой. Заголовку назначена координата top: 0 , так что он располагается вверху, а описанию bottom: 0 , и он соответственно, расположен внизу.

Остальной CSS очень простой, назначены стили для шрифтов, немного позиционирования. Ничего особенного.

Теперь наша страница выглядит вот так.

Включаем JavaScript-магию $(document).ready(function() { // Code for other parts of the demo $(".item").children("div.title").animate({top: -60}, 300); $(".item").children("div.desc").animate({bottom: -40}, 300); $(".item").hover(function() { $(this).children("div.title").stop().animate({top: 0}, 700, "easeOutBounce"); $(this).children("div.desc").stop().animate({bottom: 0}, 700, "easeOutBounce"); }, function(){ $(this).children("div.title").stop().animate({top: -60}, 500); $(this).children("div.desc").stop().animate({bottom: -40}, 400); }); $(".title, .desc").hover(function() { $(this).stop().animate({backgroundColor: "#444"}, 700, "easeOutSine"); }, function(){ $(this).stop().animate({backgroundColor: "#000"}, 700); }); });

Возможно, это выглядит немного сложно, но на самом деле это не так. Давайте рассмотрим каждую часть.

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

Сначала мы передвигаем заголовок и описание за пределы родительского блока. Но вместо того, чтобы использовать CSS, мы делаем это помощью JavaScript, по весьма конкретным причинам. Даже если JS будет отключен, страница все равно останется функциональной. Заголовок и описание останутся поверх изображения, и будут выглядеть так, как будто применен эффект наведения. А вот если бы мы скрыли эти блоки с помощью CSS, и JS на странице был бы отключен, то они так бы и не появились на экране.

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

Внутри функции, this – указывает на элемент, который вызвал событие. Мы используем метод animate , для изменения соответствующих значений. Мы также используем easing , для добавления большей привлекательности нашему эффекту. При отведении мыши, мы просто изменяем значения к их изначальному состоянию.

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

Вот и все, наш эффект готов к использованию. Можете посмотреть на и с приведенными примерами.