Как вы наверное не раз замечали на различных сайтах, большинство javascript-эффектов, основываются на отображении и скрытии различных элементов страницы. Примеров этому огромное количество: тултипы. выпадающее меню, слайд-шоу и многое другое. В сегодняшней статье, вы освоите применение базовых методов .hide() и .show(), а также узнаете как построить простейшую анимацию.
Базовые методы .hide() и .show(), без каких-либо параметров, можно рассматривать как сокращенный вариант метода .css(‘display’, ‘string’), где string это соответствующее значение свойства display. Эффект от применения этих методов очевиден – выбранный набор элементов, немедленно спрячется или отобразится, без всякой анимации.
Метод .hide() устанавливает линейный атрибут стиля, выбранному набору элементов, в значение display: none. Сложная часть здесь в том, что он запоминает значение свойства display – обычно block или inline – прежде чем изменит его на значение none. В свою очередь, метод .show() восстанавливает выбранному набору элементов, любое видимое свойство display, которое у них было установлено, ДО применения display: none.
Эта функциональность методов .show() и .hide(), особенно полезна, когда свойство display скрытых элементов, переопределено в CSS-файле. Например, элемент li, по умолчанию имеет свойство display: block, но мы можем захотеть изменить его на display: inline, для создания горизонтального меню. К счастью, использование метода .show() для скрытых элементов, таких как тэги li, не установит их дефолтное свойство display: block, потому что это сломает все горизонтальное меню, и перенесет каждый элемент li на отдельную строчку. Вместо этого, элементу будет восстановлено его прежнее, назначенное в CSS-файле, значение display: inline, и меню сохранится в прежнем виде.
На основе этих двух методов, можно построить простейшее выпадающее меню на JQuery. Итак, для начала нам понадобится вот такая html-разметка:
[html]
<div id="menu">
<ul>
<li>
<a href="#">первый пункт</a>
<ul>
<li><a href="#">пункт 1</a></li>
<li><a href="#">пункт 2</a></li>
<li><a href="#">пункт 3</a></li>
</ul>
</li>
<li>
<a href="#">второй пункт</a>
<ul>
<li><a href="#">пункт 1</a></li>
<li><a href="#">пункт 2</a></li>
<li><a href="#">пункт 3</a></li>
</ul>
</li>
<li>
<a href="#">третий пункт</a>
<ul>
<li><a href="#">пункт 1</a></li>
<li><a href="#">пункт 2</a></li>
<li><a href="#">пункт 3</a></li>
</ul>
</li>
<li>
<a href="#">четвертый пункт</a>
<ul>
<li><a href="#">пункт 1</a></li>
<li><a href="#">пункт 2</a></li>
<li><a href="#">пункт 3</a></li>
</ul>
</li>
</ul>
</div>
[/html]
Далее добавим немного CSS-стилей, чтобы наше меню выглядело как самое настоящее.
[css]
#menu {
margin: 20px 0;
clear: both;
font-size: 12px;
}
ul {
list-style: none;
display: block;
}
ul li {
list-style: none;
float: left;
display: block;
}
ul li a {
text-decoration: none;
color: #fff;
background: #055788 url(menu.png) repeat-x;
padding: 7px;
border: 1px #2E5C09 solid;
}
ul li ul{
display: none;
float: none;
margin: 5px 0 0 0;
padding: 0;
}
ul li ul li{
display: block;
float: none;
}
ul li ul li a{
background: #000;
display: block;
padding: 7px;
border: 1px #2E5C09 solid;
}
ul li ul li a:hover{
display: block;
background: #63B024;
}
[/css]
Все основные приготовления сделаны, теперь перейдем непосредственно к коду, в котором нет, ничего сложного:
[javascript]
$(document).ready(function(){
$("#menu ul li").hover(function(){
$(this).find(‘ul’).show();
}, function(){
$(this).find(‘ul’).hide();
})
})
[/javascript]
Как видно, из вышеприведенного примера, мы воспользовались событием .hover(), которое, как я уже писала ранее, включает в себя два обработчика событий: наведение мыши на элемент, и отведение мыши от элемента. Когда пользователь подводит мышь, отображается выпадающее меню, как только мышь перемещается в другое место, выпадающее меню снова исчезает.
Вот так просто, и без затей, мы создали простое выпадающее меню:

Как видите, использовать методы .hide() и .show() довольно быстро и удобно, но они кратковременные и не очень красивые. Для того чтобы добавить им изюминку, мы можем применить к ним скорость.
Эффекты и Скорость
Когда мы применяем скорость к методам .show() или .hide(), они становятся анимированными – в течении некоторого периода времени. Например, метод .hide(‘speed’), будет уменьшать высоту элемента, ширину и прозрачность, до тех пор, пока все три значения не станут равными 0, то есть пока не вступит в силу CSS-правило display: none. Метод .show(‘speed’), будет увеличивать высоту элемента, сверху вниз, ширину – слева направо, и прозрачность от 0 до 1, пока все содержимое элемента не станет полностью видимым.
Использование скорости
С любым эффектом JQuery, мы можем использовать одну из трех скоростей: slow, normal и fast. Использование .show(‘slow’) выполнит эффект появления в течение 0.6 секунд, .show(‘normal’) за 0.4 секунды, и show(‘fast’) за 0.2 секунды. Для еще большей точности, мы можем указать количество миллисекунд, например .show(850). В отличие от имен скоростей, числовые значения можно не заключать в кавычки. Давайте включим скорость в наш пример, и вы сразу увидите, насколько изящнее стало появляться выпадающее меню:
[javascript]
$(document).ready(function(){
$("#menu ul li").hover(function(){
$(this).find(‘ul’).show(‘slow’);
}, function(){
$(this).find(‘ul’).hide();
})
})
[/javascript]
Использование затухания
Если мы хотим, чтобы наше выпадающее меню появлялось только путем постепенного изменения прозрачности, мы можем использовать метод .fadeIn(‘slow’):
[javascript]
$(document).ready(function(){
$("#menu ul li").hover(function(){
$(this).find(‘ul’).fadeIn(‘slow’);
$(this).find(‘ul’).show();
}, function(){
$(this).find(‘ul’).hide();
})
})
[/javascript]
Теперь выпадающее меню будет появляться следующим образом:

Множественные эффекты
Из простых эффектов JQuery, только show() и hide() изменяют больше одного свойства за раз – высоту, ширину и прозрачность. Другие метод изменяют только одно свойство:
fadeIn()иfadeout(): прозрачностьfadeTo(): прозрачностьslideDown()иslideUp(): высоту.
Тем не менее, JQuery также предоставляет мощный метод animate(), который позволяет нам создать собственную простую анимацию с множественными эффектами. Метод animate() принимает четыре аргумента:
map(карта) из CSS-свойств и их значений – такая же, как карта у метода .css(), о котором мы говорили в предыдущей статье.- Опционально
speed(скорость), – которая может быть указана одним из ключевых слов, или числом миллисекунд. - Опционально
easing type(тип появления) – расширенная опция, о которой будем говорить в будущих статьях - Опционально
callback functions(вызываемая функция), которую мы обсудим далее.
Все вместе, три аргумента, будут выглядеть вот так:
[javascript]
.animate({param1: ‘value1’, param2: ‘value2’}, speed, function() {
alert(‘The animation is finished.’);
});
[/javascript]
Построение анимированного show()
Давайте еще раз взглянем на наш код для выпадающего меню:
[javascript]
$(document).ready(function(){
$("#menu ul li").hover(function(){
$(this).find(‘ul’).show();
}, function(){
$(this).find(‘ul’).hide();
})
})
[/javascript]
Помните что .show(‘slow’) одновременно изменяет ширину, высоту и прозрачность. Фактически этот метод всего лишь сокращенная запись метода .animate(), со специфическим набором встроенных CSS-свойств. Если мы хотим построить собственную анимацию с методом .animate, код должен выглядеть вот так:
[javascript]
$(document).ready(function(){
$("#menu ul li").hover(function(){
$(this).find(‘ul’).animate({height: ‘show’, width: ‘show’, opacity: ‘show’}, ‘slow’);
}, function(){
$(this).find(‘ul’).hide();
})
})
[/javascript]
Как видите, .animate() имеет несколько собственных сокращений. Мы используем псевдоним show, для восстановления ширины и высоты к исходным значениям, до того, как они были спрятаны. Мы также можем использовать hide, toggle или любое соответствующее числовое значение.
Leave a Reply