Очень часто веб-разработчики сталкиваются с такой задачей, как создание некоего баннера-слайдшоу, который будет прокручивать некоторый набор картинок.
До недавнего времени это было возможно только с помощью flash, однако сейчас, в эпоху царствования JavaScript, мы обойдемся без него.
Демо
Создаем HTML-каркас
Нам потребуется контейнер-обертка main_view и две вложенные в него секции image_reel и paging. Секция image_reel будет содержать сами изображения, секция paging – элементы управления для переключения изображений:
|
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
Комментарии в коде все поясняют:
|
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, исходя из количества изображений в нашем слайдшоу.
|
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}); |
Инициализируем функцию прокрутки и таймер:
|
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(); //Запускаем слайдшоу на старте |
События наведения мыши и клика:
|
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; //Не даем браузеру перейти по якорю ссылки
}); |
Ну вот и все. А теперь по традиции:
Демо
Исходники примера