27.06.10

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

Создаем HTML-каркас

Нам потребуется контейнер-обертка main_view и две вложенные в него секции image_reel и paging. Секция image_reel будет содержать сами изображения, секция paging – элементы управления для переключения изображений:

XHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div class="main_view">
<div class="window">
<div class="image_reel">
<a href="#"><img src="reel_1.jpg" alt="" /></a>
<a href="#"><img src="reel_2.jpg" alt="" /></a>
<a href="#"><img src="reel_3.jpg" alt="" /></a>
<a href="#"><img src="reel_4.jpg" alt="" /></a>
</div>
</div>
<div class="paging">
<a href="#" rel="1">1</a>
<a href="#" rel="2">2</a>
<a href="#" rel="3">3</a>
<a href="#" rel="4">4</a>
</div>
</div>

Украшаем при помощи CSS

Комментарии в коде все поясняют:

CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*--Основной контейнер--*/
.main_view {
    float: left;
    position: relative;
}
/*--Область слайдшоу--*/
.window {
    height:286px;    width: 790px;
    overflow: hidden; /*--прячем все, что будет за пределами указанных размеров--*/
    position: relative;
}
.image_reel {
    position: absolute;
    top: 0; left: 0;
}
.image_reel img {float: left;}
/*--Переключатель картинок--*/
.paging {
    position: absolute;
    bottom: 40px; right: -7px;
    width: 178px; height:47px;
    z-index: 100; /*--Показываем его поверх всего остального--*/
    text-align: center;
    line-height: 40px;
    background: url(paging_bg2.png) no-repeat;
    display: none; /*--Делаем скрытым, покажем с помощью jQuery--*/
}
.paging a {
    padding: 5px;
    text-decoration: none;
    color: #fff;
}
.paging a.active {
    font-weight: bold;
    background: #920000;
    border: 1px solid #610000;
    -moz-border-radius: 3px;
    -khtml-border-radius: 3px;
    -webkit-border-radius: 3px;
}
.paging a:hover {font-weight: bold;}

Добавляем jQuery

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

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
//Показываем элемент управления списком, делаем первую ссылку активной
$(".paging").show();
$(".paging a:first").addClass("active");
//Получаем размер изображения и их количество
//после чего вычисляем ширину image_reel.
var imageWidth = $(".window").width();
var imageSum = $(".image_reel img").size();
var imageReelWidth = imageWidth * imageSum;
//устанавливаем ширину image_reel
$(".image_reel").css({'width' : imageReelWidth});

Инициализируем функцию прокрутки и таймер:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//Функция переключения изображений
rotate = function(){
var triggerID = $active.attr("rel") - 1; //Получаем номер цикла прокрутки
var image_reelPosition = triggerID * imageWidth; //и определяем, на сколько нужно провернуть наши изображения
$(".paging a").removeClass('active'); //деактивируем все ссылки в пейджере
$active.addClass('active'); //делаем текущую ссылку активной
//Анимация
$(".image_reel").animate({
left: -image_reelPosition
}, 500 );
};
//Ротация изображений и таймерные события
rotateSwitch = function(){
play = setInterval(function(){ //Устанавливаем таймер
$active = $('.paging a.active').next(); //Переключаемся на следующее изображение
if ( $active.length === 0) { //Если дошли до конца
$active = $('.paging a:first'); //То начинаем сначала
}
rotate(); //наша функция
}, 7000); //Интервал таймера (7 секунд)
};
rotateSwitch(); //Запускаем слайдшоу на старте

События наведения мыши и клика:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//наведение мыши
$(".image_reel a").hover(function() {
clearInterval(play); //остановить прокрутку
}, function() {
rotateSwitch(); //после ухода мыши возобновить ее
});
//Клик по переключателю картинок
$(".paging a").click(function() {
$active = $(this); //Активировать нужное изображение
//Реинициализаяция таймера
clearInterval(play); //Остановить прокрутку
rotate(); //Переключиться на нужное изображение
rotateSwitch(); // Запустить опять таймер
return false; //Не даем браузеру перейти по якорю ссылки
});

Ну вот и все. А теперь по традиции:
Демо
Исходники примера

Добавить комментарий

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

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>