jQuery--большой функционал за короткое время

3.35K
.
Z3RO
В этой статье я опишу некоторые приёмы рабобты с jQuery, которые будут действительно полезны.
Меньше слов, больше дела. Начнём пожалуй с основ.
Выборка элементов
Выборка элементов практически идентична с выборкой в CSS.
Давайте посмотрим на такой пример:
<div class="one">
<div id="two">
<a class="block">Выбираемый элемент</a>
</div>
</div>

Чтобы получить доступ к Выбираемому элементу нужно использовать следующий код:
$('div.one #two a.block')
Естественно правильнее будет так:
$('#two a.block')
но нужно было просто привести пример.
Чтобы выбрать все якоря, которые находятся, скажем в div классе 'one', нужно использовать следующий код:
$('div.one > a')
Оператор > показывает, что элемент справа является дочерним для элемента слева.
Также можно использовать псевдоэлементы, такие как :first, :last, :eq() и подобные, к примеру: чтобы выбрать первый дочерний якорь для div класса
'one' нужно использовать следующий код:
$('div.one > a:first')
Чтобы выбрать 4ый якорь нужно использовать
$('div.one > a:eq(4)')
Думаю здесь всё понятно.
Итак начнем
Я уже описал пару примеров в другой теме, поэтому просто скопирую их сюда:

<div class="hide">Текст скроется если на него нажать</div>
<script type="text/javascript">
$('div.hide').fadeOut('slow');
</script>


Теперь все элементы, заключенные в <div class="hide"></div> при клике на них будут скрыватся.

<div class="hidenext">Скрыть/открыть</div>
<div>Текст</div>
<div class="hidenext">Скрыть/открыть 2</div>
<div>Текст 2</div>
<script type="text/javascript>"$('div.hidenext').click(function (){$(this).next().slideToggle('normal')});</script>


С данным кодом при клике на любой элемент в div классе hidenext следующий элемент будет скрыватся, при повторном клике раскрыватся.

Фокусы с функцией animate()
Функция animate() позволяет создавать любые анимации с использованием обычного CSS.
Рассмотрим следующий пример:

$('div.navigation a').hover(
function(){$(this).stop(true).animate({width: '+=10px'}, {duration: 200, queue: false})},
function(){$(this).stop(true).animate({width: '-=10px'}, {duration: 200, queue: false})});


В данном коде очень много неизвесного, но и не сложного.
Начнем разбор:
$('div.navigation a') -- этим кодом мы выбираем все якори в div классе 'navigation'
Ф-ия hover принимает два параметра: код который будет исполнятся при наведении курсора(mouseOver), и код, который будет исполнятся при отведении курсора(mouseOut) от элемента.
На самом деле это не совсем функция, а скорее обработчик событий. Существует много обработчиков событий:

mouseOver
mouseOut
focus -- получение фокуса
blur -- потеря фокуса
mouseDown -- кнопка мыши нажата
mouseUp -- кнопка мыши отпущена
click -- обьеденяет 2 предыдущих события
dblclick -- двойной щелчок
change -- элемент формы потерял фокус и его значение было изменено
keyPress -- клавиша нажата
keyUp -- клавиша отпущена
submit -- данные формы отправлены(если возвратит false, отправка не произойдет)

Это естественно не все, но думаю пока хватит. Также эти события можно использовать в HTML коде в качестве аттрибутов тегов с добавлением в начало слова "on". Например:

<input type="text" name="text" onFocus="alert('Получен фокус')"/>

Продолжим:
первая ф-ия -- увеличивает ширину ссылки на 10 пикселов, а вторая уменьшает.
{duration: 200, queue: false} -- означает, что анимация исполнится за 200 мс и что отменян=ется очередь анимации.
В CSS нужно прописать следующий стиль для ссылок в навигации:

.navigation a{
background-color: rgba(198,214,229,0.7);
display: block;
margin-bottom: 2px;
padding: 5px;
text-decoration: none;
}
.navigation a:hover{background-color: rgba(198,214,229,0.9);}

Результат показан на скриншоте.
Прикрепленные файлы:
.
Пока ничего не пишите. Я еще не закончил.
.
Модераторы, измените пжл в первом посте все теги code на php. Привычка.
.
Теперь функция для создания слайдшоу.

$(document).ready(function (){slideshow();});
function slideshow(){
var t = $('div.slideshow img.show');
n = t.next().length ? t.next() : t.parent().children(':first');
t.hide().removeClass('show');
n.fadeIn('slow').addClass('show');
setTimeout(slideshow, 3000);
}


Что к чему:
$(document).ready() сообщает, что функция должна исполнится после полного формирования обьектной модели документа(DOM)
var t = $('div.slideshow img.show'); -- этот код определяет какое изображение сейчас показывается.
n = t.next().length ? t.next() : t.parent().children(':first'); -- эта строка определяет следующее изображение(если следующего нет, то берётся первое)
t.hide().removeClass('show'); -- ыта строка убирает из виду текущее изображения
n.fadeIn('slow').addClass('show'); -- а эта показывает следующее
setTimeout(slideshow, 3000); -- эта строка указывает браузеру, что функцию нужно вызывать каждые 3 секунды
Прошу обратить внимание Димарио на 3ю и последнюю строки ;)

Эта функция превратит в слайдшоу любой набор изображений заключенный в div класс slideshow.
Вот пример HTML кода для слайдшоу:

<div class="slideshow">';
<img src="' . $home . '/images/slideshow/1.png" class="show"/>
<img src="' . $home . '/images/slideshow/2.jpg"/>
<img src="' . $home . '/images/slideshow/3.png"/>
</div>

Текущее изображение должно иметь класс show.
Вот CSS код:

.slideshow{
background: #608cb8;
height: 100px;
width: 100%;
}

.slideshow img{display: none;}
.slideshow img.show{display: block;}
.
Можете комментировать. Позже напишу еще примеров. Сейчас времени нету.
.
ramzes
setTimeout('slideshow()', 3000);
по моему так.
а вообще молодец
что то новое для себя узнал
.
ramzes (17.07.2011/15:25)
setTimeout('slideshow()', 3000);
по моему так.
а вообще молодец
что то новое для себя узнал
Нет. Без кавычек и скобок
.
для особо мерзких, мы особо дерзкие
Автор, продолжай
.
Z3RO (17.07.2011/15:39)
Нет. Без кавычек и скобок
тогда почему с кавычками и скобками работает,а без них нет? =)
http://www.askdev.ru/javascrip ... D0%B8
и не только у меня, первый попавшийся рез из яши
http://www.elated.com/articles ... rval/
живой пример
.
ramzes (17.07.2011/16:19)
тогда почему с кавычками и скобками работает,а без них нет? =)
http://www.askdev.ru/javascrip ... D0%B8
и н
У меня наоборот так не работает. Гг Какой браузер?
Всего: 136