Слайдшоу-галерея на jQuery на примере


Галерея слайдшоу представляет собой листалку картинок, а также список ссылок с цифрами на картинки.

Посмотреть демо >>

HTML:

<!DOCTYPE html>
<html>
<head>
	<script src="http://code.jquery.com/jquery-latest.js"></script>
	<script type="text/javascript" src="js/slideshow.js"></script> 
	<link rel="stylesheet" type="text/css" href="css/slideshow.css">
</head>
<body>


	<div class="b-slideshow">

		<div class="b-slideshow-area">
			<div class="b-slideshow-list">
				<div class="b-slideshow-item">
					<img src="img/slide1.jpg" alt="" />
				</div>
				<div class="b-slideshow-item">
					<img src="img/slide2.jpg" alt="" />
				</div>
				<div class="b-slideshow-item">
					<img src="img/slide3.jpg" alt="" />
				</div>
				<div class="b-slideshow-item">
					<img src="img/slide4.jpg" alt="" />
				</div>
				<div class="b-slideshow-item">
					<img src="img/slide5.jpg" alt="" />
				</div>
				<div class="b-slideshow-item">
					<img src="img/slide6.jpg" alt="" />
				</div>
			</div>
		</div>		

		<div class="b-slideshow-leftarr"></div>
		<div class="b-slideshow-rightarr"></div>
		
	</div>


</body>
</html>

CSS:

* {
	margin: 0;
	padding: 0;
}
body {
	padding: 20px;
}
	.b-slideshow {
		height: 480px;
		width: 640px;
		margin: 0 auto;
		position: relative;
	}
		.b-slideshow-area {
			width: 640px;
			height: 480px;
			overflow: hidden;
		}
			.b-slideshow-list {
				position: relative;
				left: 0;
				width: 100000px;
				letter-spacing: -0.25em;
			}
				.b-slideshow-item {
					display: inline-block;
					//display: inline;
					//zoom:1;
					width: 640px;
					height: 480px;
				}
			.b-slider-nav {
				text-align: right;
				position: absolute;
				right: 10px;
				bottom: 10px;
			}
				.b-slider-nav li {
					display: inline-block;
					//display: inline;
					//zoom:1;
				}
					.b-slider-nav li  a {
						display: inline-block;
						//display: inline;
						//zoom:1;
						width: 23px;
						height: 20px;
						font: normal 12px/20px arial;
						background: #fff;
						text-align: center;
						color: #000;
						text-decoration: none;
						margin-left: 3px;
					}
						.b-slider-nav li.active  a {
							color: #fff;
							background: #900;
						}
						.b-slider-nav li  a:hover {
							color: #fff;
							background: #c00;
						}
		.b-slideshow-leftarr {
			width: 47px;
			height: 49px;
			position: absolute;
			left: 29px;
			top: 220px;
			background: url("../img/arr_l.png");
			cursor: pointer;
		}
		.b-slideshow-rightarr {
			width: 46px;
			height: 47px;
			position: absolute;
			right: 29px;
			top: 220px;
			background: url("../img/arr_r.png");
			cursor: pointer;
		}

Javascript, jQuery:

$(document).ready(function() {

	var slidesNumber = $(".b-slideshow-item").size();	// определяем количество слайдов
	var slideWidth = $(".b-slideshow-item").eq(1).width(); // определяем ширину одного слайда
	
	$(".b-slideshow-list").after('<ul class="b-slider-nav"></ul>'); // создаём блок списка ссылок на слайды
	
	var navCont = $(".b-slider-nav").html();	
	
	//заполняем список ссылками на каждый слайд:
	for(var i=1; i<=slidesNumber; i++){
		$(".b-slider-nav").html(navCont+'<li><a href="#">'+i+'</a></li>');
		navCont = $(".b-slider-nav").html();
	};
	
	$(".b-slider-nav li").eq(0).addClass("active"); // делаем активной ссылку на первый слайд
	var activeSlide = 1;
	
	$(".b-slider-nav li").click(function(){ // при клике на элемент списка слайдов
		$(".b-slider-nav li").removeClass("active"); // убираем класс active у всех элементов
		$(this).addClass("active"); // добавляем класс active к элементу, на который кликнул пользователь
		var clickedSlide = $(this).index()+1; // в переменную clickedSlide записываем порядковый номер кликнутой ссылки
		$(".b-slideshow-list").animate({
			left: -slideWidth*(clickedSlide-1)+"px" // производим анимацию: перемещаем набор слайдов так, чтобы в видимой области появился слайд с номером, соответствующим номеру ссылки, на которую кликнул пользователь
		}, 800); // анимация будет длиться 800 милисекунд
		activeSlide = $(".b-slider-nav li.active").index()+1; // в переменную activeSlide записываем порядковый номер выбранного слайда
	});
	
	
	$(".b-slideshow-rightarr").click(function(){ // при клике на правую стрелку
		if(activeSlide<slidesNumber){ // если номер активного слайда меньше общего количества слайдов
			$(".b-slideshow-list").animate({
				left: "-=0"+slideWidth+"px" // показываем следующий слайд
			}, 800);
			activeSlide++; // делаем следующий слайд активным
			$(".b-slider-nav li").removeClass("active");
			$(".b-slider-nav li").eq(activeSlide-1).addClass("active"); // делаем активной следующую ссылку
		}
		else { // если номер активного слайда не меньше общего количества слайдов
			$(".b-slideshow-list").animate({
				left: "0px" // перелистываем слайдшоу в начало, к первому слайду
			}, 800);
			$(".b-slider-nav li").removeClass("active");
			$(".b-slider-nav li").eq(0).addClass("active"); // делаем активным первый слайд
			activeSlide = $(".b-slider-nav li.active").index()+1; // делаем активной первую ссылку
		}
	});
	
	$(".b-slideshow-leftarr").click(function(){ // при клике на левую стрелку
		if(activeSlide>1){ // если номер активного слайда больше единицы
			$(".b-slideshow-list").animate({
				left: "+=0"+slideWidth+"px" // пролистываем к предыдущему слайду
			}, 800);
			activeSlide--; // делаем предыдущий слайд активным
			$(".b-slider-nav li").removeClass("active");
			$(".b-slider-nav li").eq(activeSlide-1).addClass("active"); // делаем активной предыдущую ссылку
		}
		else {
			$(".b-slideshow-list").animate({
				left: -slideWidth*(slidesNumber-1)+"px" // перелистываем всё слайдшоу в конец, к последнему слайду
			}, 800);
			$(".b-slider-nav li").removeClass("active");
			$(".b-slider-nav li").eq(-1).addClass("active"); // делаем активным последний слайд
			activeSlide = $(".b-slider-nav li.active").index()+1; // делаем активной последнюю ссылку
		}
	});	
});

Посмотреть демо >>


Слайдшоу на jQuery с автопрокруткой

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

Сперва добавим кнопку stop-play в конец div-а с классом b-slideshow-area:

<div class="b-slideshow-playstop">Stop</div>

Затем внесем некоторые корректировки в CSS файл. Добавим стили для кнопки play-stop

.b-slideshow-playstop {
	width: 60px;
	height: 20px;
	font: normal 12px/20px arial;
	background: #fff;
	text-align: center;
	color: #000;
	position: absolute;
	right: 10px;
	bottom: 10px;
	cursor: pointer;
}
	.b-slideshow-playstop:hover {
		color: #fff;
		background: #c00;
	}
	.b-slideshow-playstop-active {
		color: #fff;
		background: #900;
	}


А также немного сместим пагинацию:

.b-slider-nav {
	text-align: right;
	position: absolute;
	right: 90px;
	bottom: 10px;
}

Теперь осталось просто добавить этот код в наш jQuery файл:

	setInterval(function () {	// будем повторять функцию с некоторым интервалом времени
		if (pause==false) { // если значение переменной pause равно false
			if (activeSlide>slidesNumber-1){ // если индекс активного слайда больше общего числа слайдов
				$(".b-slideshow-list").animate({
					left: "0px" // листаем всё к первому слайду
				}, 800);
				activeSlide=1; // делаем первый слайд активным
				$(".b-slider-nav li").removeClass("active"); // убираем у всех кнопок пагинации класс active
				$(".b-slider-nav li").eq(activeSlide-1).addClass("active"); // добавляем класс active первому элементу пагинации
			}
			else {  // если индекс активного слайда меньше их общего числа
				activeSlide++; // делаем активным следующий слайд
				$(".b-slideshow-list").animate({
					left: "-=0"+slideWidth+"px" // пролистываем галерею к следующему слайду
				}, 800);			
				$(".b-slider-nav li").removeClass("active");
				$(".b-slider-nav li").eq(activeSlide-1).addClass("active");	// добавляем следующему слайду класс active		
			}
		}
	}, 3000); // интервал времени равен трем секундам

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

	$(".b-slideshow-playstop").toggle( // при клике поочередно выполняем одну из функций
		function(){
			pause=true; // останавливаем анимацию
			$(this).addClass("b-slideshow-playstop-active");
			$(this).text("Play"); // изменяем текст кнопки на play
		},
		function(){
			pause=false; // запускаем анимацию
			$(this).removeClass("b-slideshow-playstop-active");
			$(this).text("Stop"); // изменяем текст кнопки на stop
		}
	);

И, наконец, последний штрих. Чтобы исключить случаи, когда пользователь с помощью пагинации или кнопок перешел на слайд, и он тут же пролистался ещё куда-то автоматически, вставляем следующий код на каждое из уже имеющихся событий .click():

pause=true; // запрещаем анимацию
setTimeout(function () { 
	pause=false; // разрешаем анимацию
}, 7000); // через 7 секунд после клика на один из элементов управления

Посмотреть демо слайдшоу с автопрокруткой >>



Поделиться ссылочкой: