Блог для начинающих веб разработчиков. HTML, СSS, Jquery, Drupal и другое.

→ Делаем простой слайдер на jQuery

Опубликовано: 13 апреля 2012

Некоторое время назад, я начал осваивать jQuery. Думаю, все знают, что так называется самая популярная библиотека для разработки и создания сценариев (скриптов) на JavaScript. С её помощью очень просто создавать эффектные и интерактивные элементы сайта.

В этой статье, хочу рассказать, как создать простой универсальный слайдер с использованием jQuery. На самом деле, в сети очень большое количество разнообразных готовых слайдеров, которые порой выглядят очень заманчиво, и достаточно функциональны, но мы сделаем его с нуля.

Итак, какие особенности нашего слайдера на jQuery (который я назвал HWSlider) можно отметить?

  • Простота использования и оформления – я хотел создать простой сценарий без наворотов, поэтому, я не использовал анимации на CSS3, а код получился очень универсальным  и понятным.
  • Возможность вставлять в слайды как изображения, так и любой HTML – код.
  • Возможность прокручивать слайды как по порядку (вперёд - назад), так и выбирать каждый слайд (1,2,3,4…)
  • Автоматически формирующиеся ссылки (предыдущий – следующий, и с номерами слайдов). Вам нужно лишь вставить нужное количество div-ов, а всё остальное рассчитается само. Ну и можно отметить, что количество слайдов неограниченно.

Скрипт совместим со всеми современными браузерами: IE, Opera, Firefox, Safari, Chrome, (т.к. слайдер не использует CSS3).

ДемоСкачать

Начнём с HTML разметки. В нужное место html страницы или шаблона нужно вставить.

<div id="slider-wrap">
	<div id="slider">
		<div class="slide">Здесь содержание слайда 1</div>
		<div class="slide">Здесь содержание слайда 2</div>
		<div class="slide">Здесь содержание слайда 3</div>
	</div>
</div>

Здесь всё просто, как видно, вы можете вставлять сколько угодно слайдов путём создания новых div-ов. Внутрь их можно вставлять любой html код, например картинку или блок с текстом. Не забудьте только подключить саму библиотеку на jQuery в вместе со всеми js - скриптами. Если не знаете как, смотрите в примере.

Далее рассмотрим CSS. Это разметка стилей для нашего jQuery - слайдера. Вставьте код, что приведён ниже в файл стилей (css - файл) вашего сайта или темы.

#slider-wrap{ /* Оболочка слайдера и кнопок */
	width:660px; 
	}
#slider{ /* Оболочка слайдера */
	width:640px;
	height:360px;
	overflow: hidden;
	border:#eee solid 10px;
	position:relative;}
.slide{ /* Слайд */
	width:100%;
	height:100%;
	}
.sli-links{ /* Кнопки смены слайдов */
	margin-top:10px;
	text-align:center;}
.sli-links .control-slide{
	margin:2px;
	display:inline-block;
	width:16px;
	height:16px;
	overflow:hidden;
	text-indent:-9999px;
	background:url(radioBg.png) center bottom no-repeat;}
.sli-links .control-slide:hover{
	cursor:pointer;
	background-position:center center;}
.sli-links .control-slide.active{
	background-position:center top;}
#prewbutton, #nextbutton{ /* Ссылка "Следующий" и "Педыдущий" */
	display:block;
	width:15px;
	height:100%;
	position:absolute;
	top:0;
	overflow:hidden;
	text-indent:-999px;
	background:url(arrowBg.png) left center no-repeat;
	opacity:0.8;
	z-index:3;
	outline:none !important;}
#prewbutton{left:10px;}
#nextbutton{
	right:10px;
	background:url(arrowBg.png) right center no-repeat;}
#prewbutton:hover, #nextbutton:hover{
	opacity:1;}

Давайте разберём его подробнее. Сначала мы даём основному блоку с идентификатором "slider-wrap", нужную ширину. Так как в него вставляются все остальные блоки, то высоту можно не задавать, она будет зависеть от того, что будет внутри. Затем нам нужно задать размеры контейнера в котором будут находиться слайды. Это – #slider. Зададим ему ширину и высоту, а так же, к примеру, границу в 10 пикселей. Здесь ширина – 640px это меньше чем ширина родителя, так как мы добавляем границы шириной по 10px справа и слева. От ширины этого div-а так же зависит и ширина самих слайдов ( .slide).

И последнее: нам нужно обязательно задать position:relative для контейнера слайдов так как слайды внутри - с абсолютным позиционированием. Для самих слайдов в CSS задаётся только ширина и высота. Остальные свойства задаются уже в jQuery скрипте.

Селектор .sli-links это блок, в котором будут находится кнопки перехода на необходимый слайд. Эти кнопки представляют из себя простые элементы вида <span class="control-slide">номер</span>, которые вставятся в необходимом количестве автоматически, вместе и с их родителем .sli-links. Для кнопок мы задаём красивый вид, а именно делаем каждую кнопку квадратной, выравниваем их все по центру, а так же, благодаря overflow:hidden и text-indent:-9999px, убираем текст, оставляя только фоновые иконки, которые так же меняются при наведении на этот элемент курсора. Для удобства я использовал спрайты, что уменьшило количество изображений.

Далее оформляется активная кнопка. Просто изменяем положение фона. Затем переоформим ссылки для перехода на сдедующий и предыдущий слайды. Вы можете дать им любое оформление, так же как и кнопкам. Данные ссылки вставляются автоматически внутрь #slider. Но чтобы их было видно, я задал им абсолютное позиционирование и верхний слой (z-index:3), чтобы они были отображены над слайдами. Думаю с CSS здесь всё понятно и просто: вы можете поменять практически все свойства, чтобы оформить слайдер так, как вам необходимо.

Давайте теперь рассмотрим сам сценарий:

var hwSlideSpeed = 700;
var hwTimeOut = 3000;
var hwNeedLinks = true;

$(document).ready(function(e) {
	$('.slide').css(
		{"position" : "absolute",
		 "top":'0', "left": '0'}).hide().eq(0).show();
	var slideNum = 0;
	var slideTime;
	slideCount = $("#slider .slide").size();
	var animSlide = function(arrow){
		clearTimeout(slideTime);
		$('.slide').eq(slideNum).fadeOut(hwSlideSpeed);
		if(arrow == "next"){
			if(slideNum == (slideCount-1)){slideNum=0;}
			else{slideNum++}
			}
		else if(arrow == "prew")
		{
			if(slideNum == 0){slideNum=slideCount-1;}
			else{slideNum-=1}
		}
		else{
			slideNum = arrow;
			}
		$('.slide').eq(slideNum).fadeIn(hwSlideSpeed, rotator);
		$(".control-slide.active").removeClass("active");
		$('.control-slide').eq(slideNum).addClass('active');
		}
if(hwNeedLinks){
var $linkArrow = $('<a id="prewbutton" href="#"></a><a id="nextbutton" href="#"></a>')
	.prependTo('#slider');		
	$('#nextbutton').click(function(){
		animSlide("next");

		})
	$('#prewbutton').click(function(){
		animSlide("prew");
		})
}
	var $adderSpan = '';
	$('.slide').each(function(index) {
			$adderSpan += '<span class = "control-slide">' + index + '</span>';
		});
	$('<div class ="sli-links">' + $adderSpan +'</div>').appendTo('#slider-wrap');
	$(".control-slide:first").addClass("active");
	
	$('.control-slide').click(function(){
	var goToNum = parseFloat($(this).text());
	animSlide(goToNum);
	});
	var pause = false;
	var rotator = function(){
	if(!pause){slideTime = setTimeout(function(){animSlide('next')}, hwTimeOut);}
			}
	$('#slider-wrap').hover(	
		function(){clearTimeout(slideTime); pause = true;},
		function(){pause = false; rotator();
		});
	rotator();
});

Сначала в переменных сохраняются настройки: hwSlideSpeed - скорость перелистывания слайдов, hwTimeOut - время спустя которое происходит автоматическая смена слайда, hwNeedLinks - управляет ссылками "Следующий " и "Предыдущий" - если значение этой переменной равно true, то эти ссылки будут отображаться, а если false, то соответственно их не будет (как на главной странице моего блога).

Далее мы устанавливаем необходимые CSS свойства для слайдов с помощью метода .css(). Блоки со слайдами мы накладываем друг на друга используя абсолютное позиционирование, затем скрываем их все .hide(), а затем показываем только первый. Переменная slideNum - это номер активного слайда, то есть счётчик.

Основная логика работы нашего jQuery слайдера - это функция animSlide. Она принимает один параметр. Если мы передадим в неё строки "next" или "prew", то сработают условные операторы и будет отображён соответственно следующий или предыдущий слайд. Если же мы пошлём в качестве значения цифру, то это число станет активным слайдом и он будет показан.

Таки образом эта функция скрывает текущий div, высчитывает новый и показывает его.

Обратите внимание, что методу .fadeIn(), который делает видимым активный слайд, задан второй аргумент. Это, так называемая функция обратного вызова. Она выполняется, когда слайд полностью появится. В данном случае это сделано для обеспечения автоматической прокрутки слайдов. Функция rotator, определённая ниже, вызывает снова функцию animSlide для перехода на следующий слайд через необходимый нам интервал времени: мы получим замыкание, обеспечивающее постоянную прокрутку.

Всё работает нормально, но нам нужно остановить выполнение автоматики, если пользователь подводит курсор к слайдеру, или нажимает кнопки. Для этого создана переменная pause. Если её значение положительно - true, значит автоматического переключения не будет. С помощью метода .hover(), мы указываем: очистить таймер если он запущен - clearTimeout(slideTime), и установить pause = true. А после отвода курсора, отключить паузу и запустить замыкание rotator(). 

Дополнительно нам нужно создать новые элементы на странице и поместить их в нужное место. Используя цикл each() для каждого слайда (div-а с классом .slide), создадим элемент span внутри которого бует число - номер слайда. Это число используется в функции анимации, для перехода к слайду с этим номером. Обернём всё в div с нужными классами, и в итоге получим такую разметку:

<div class="sli-links">
  <span class="control-slide">0</span>
  <span class="control-slide">1</span>
  <span class="control-slide">2</span>
  <span class="control-slide">3</span>
</div>

Затем если в настройках указано, что ссылки "следующий - предыдущий" нужны, то создадим и их, и сразу повесим на них обработчики. В качестве обработчика клика используем ту же самую функцию animSlide, с аргументами "next" и "prew". 

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

В итоге разметка слайдера будет выглядеть примерно так (в качестве слайдов я использовал изображения, и установил 5 штук):

<div id="slider-wrap">
  <div id="slider">
    <a id="prewbutton" href="#">&lt;</a>
    <a id="nextbutton" href="#">></a>
    <div class="slide" style="position: absolute; top: 0px; left: 0px; display: none">
      <img src="img/001.jpg" width="640" height="360">
    </div>
    <div class="slide" style="position: absolute; top: 0px; left: 0px; display: none">
      <img src="img/002.jpg" width="640" height="360">
    </div>
    <div class="slide" style="position: absolute; top: 0px; left: 0px; display: none">
      <img src="img/003.jpg" width="640" height="360">
    </div>
    <div class="slide" style="position: absolute; top: 0px; left: 0px; display: block">
      <img src="img/004.jpg" width="640" height="360">
    </div>
  </div>
  <div class="sli-links">
    <span class="control-slide">0</span>
    <span class="control-slide">1</span>
    <span class="control-slide">2</span>
    <span class="control-slide active">3</span>
  </div>
</div>

Ниже вы можете посмотреть, как работает наш jQuery слайдер на демо странице, и скачать все необходимые исходники.

ДемоСкачать

На напоследок, пару моментов об интеграции этого слайдера с Drupal. Вы можете добавить этот код в файл шаблона, например в page.tpl.php, и прикрепить скрипт отдельными js-файлом к теме. Jquery в Drupal включен по умолчанию, но работает в режиме совместимости (подробнее). Есть два варианта доработки. Либо обернуть весь js код:

(function ($) {
  // Весь ваш код...
})(jQuery);

или заменить символы $ во всём скрипте на jQuery. Вот так:

jQuery(document).ready(function(e) {
	jQuery('.slide').css(
		{"position" : "absolute",
		 "top":'0', "left": '0'}).hide().eq(0).show();
	var slideNum = 0;
	var slideTime;
	slideCount = jQuery("#slider .slide").size();
	var animSlide = function(arrow){
// и т. д.

В примере уже реализован первый метод.

Спасибо за прочтение! Оставляйте комментарии, приходите ещё. А так же вы можете подписаться на RSS, чтобы получать обновления блога первыми! 

Добавлено: Это ещё не всё. Читайте следующую статью о HWSlider. Там мы добавим новые возможности к данному скрипту.

Поделиться:
Комментарии

femme cherche partouze kardashian porno - https://porno.teatroquirinetta.it/kardashian-porno.html mamie fait la pute

free porno amateur - https://sexe-gratuit.teatroquirinetta.it/free-porno-amateur.htm site

de rencontre qui marche rencontre gratuite 80 - https://plan-cul.teatroquirinetta.it/rencontre-gratuite-80.html site de rencontre amoureuse ado sans inscription veuve salope - https://plan-cul.teatroquirinetta.it/veuve-salope.html beurette big ass

mature sexe party - https://teatroquirinetta.it/mature-sexe-party.html

porno x art une envie de sexe - https://porno-gratuit.teatroquirinetta.it/une-envie-de-sexe.html site de rencontre des jeunes de plus de

50 ans video sexe soft - https://plan-cul.teatroquirinetta.it/video-sexe-soft.html

baise enorme bite video cougar sexe - https://teatroquirinetta.it/video-cougar-sexe.html il baise une infirmiere porno avignon - https://plan-cul.teatroquirinetta.it/porno-avignon.html une maman baise avec un jeune plan cul lannion -

https://plan-cul.teatroquirinetta.it/plan-cul-lannion.html porno

baise au travail site de rencontre homme espagnol - https://rencontre-gratuite.teatroquirinetta.it/site-de-rencontre-homme-espagnol.html chat rencontre

recherche de plan cul - https://sexe-gratuit.teatroquirinetta.it/recherche-de-plan-cul.htm plan cul bourgoin porno exclu - https://plan-cul.teatroquirinetta.it/porno-exclu.html baise a donf

film porno annee 70 - https://rencontre-gratuite.teatroquirinetta.it/film-porno-annee-70.html baise femme soumise site de rencontre lgbt - https://plan-cul.teatroquirinetta.it/site-de-rencontre-lgbt.html

porno travesti francais politique porno - https://plan-cul.teatroquirinetta.it/politique-porno.html vrai beurette rencontre

webcam coquine - https://porno-gratuit.teatroquirinetta.it/rencontre-webcam-coquine.html belle

femme ronde qui baise la levrette com - https://plan-cul.teatroquirinetta.it/la-levrette-com.html jolie beurette

sexy elle baise debout - https://plan-cul.teatroquirinetta.it/elle-baise-debout.html salope a toulouse sexe porno chinois - https://rencontre-gratuite.teatroquirinetta.it/sexe-porno-chinois.html salope mature suce pute au travail -

https://porno-gratuit.teatroquirinetta.it/pute-au-travail.html

sexe au lit sonia la pute - https://plan-cul.teatroquirinetta.it/sonia-la-pute.html valentina ricci porno

video porno cuni - https://porno-gratuit.teatroquirinetta.it/video-porno-cuni.html vieille salope rousse porno amateur branlette - https://porno-gratuit.teatroquirinetta.it/porno-amateur-branlette.html

histoire de sexe en video bon cul de salope - https://plan-cul.teatroquirinetta.it/bon-cul-de-salope.html comment faire un site de rencontre

sexe a 20 https://rencontre-gratuite.teatroquirinetta.it/site-de-rencontre-amoureuse.html film baise https://plan-cul.teatroquirinetta.it/site-de-rencontre-gratuit-49.html video porno hardcor

https://plan-cul.teatroquirinetta.it/blog-salope-mature.html femme cherche

homme pour baise https://plan-cul.teatroquirinetta.it/baise-moi-le-cul.html salope suce des

bites https://porno.teatroquirinetta.it/video-sexe-gratuit-en-francais.html mature qui

baise bien https://sexe-gratuit.teatroquirinetta.it/sandrine-quetier-porno.htm rencontre gratuite drome 26 https://plan-cul.teatroquirinetta.it/sexe-amateur-gratuit-francais.html sequence porno https://plan-cul.teatroquirinetta.it/baise-fontaine.html porno famille fr https://porno.teatroquirinetta.it/tube-pute.html baise en cuisine https://porno-gratuit.teatroquirinetta.it/jayden-james-porno.html sexe a

geneve https://porno.teatroquirinetta.it/baise-plusieurs.html site de rencontre nord gratuit https://porno.teatroquirinetta.it/la-grotte-du-sexe.html arabe francaise porno https://plan-cul.teatroquirinetta.it/site-de-rencontre-pour-les-geek.html boruto porno https://plan-cul.teatroquirinetta.it/baise-fontaine.html site de rencontre etranger gratuit

https://porno.teatroquirinetta.it/site-de-rencontre-femmes-riches.html site de telechargement porno

https://porno.teatroquirinetta.it/couple-baise-avec-un-jeune.html grosse maman baise https://plan-cul.teatroquirinetta.it/video-drole-sexe.html marine

le pen pute https://rencontre-gratuite.teatroquirinetta.it/sexe-amateur-femme-mure.html femme

musclee baise https://porno.teatroquirinetta.it/site-de-rencontre-drague-net.html sexe coquin https://plan-cul.teatroquirinetta.it/rencontre-coquine-vaucluse.html baise au

bordel https://sexe-gratuit.teatroquirinetta.it/sandrine-quetier-porno.htm sexe aquitaine https://porno.teatroquirinetta.it/pizza-xxl-porno.html plan cul sur avignon https://rencontre-gratuite.teatroquirinetta.it/fille-beurette-nue.html rencontre femme nancy https://plan-cul.teatroquirinetta.it/porno-des-iles.html film porno

a telecharger https://rencontre-gratuite.teatroquirinetta.it/rencontre-gratuite-dijon.html video baise sauvage

вт, 2019-05-21 22:39

naked dating videos blotter porno - https://gratis-porno.giustiziamministrativa.it/blotter-porno.html

porno full hd african women dating - https://gratis-porno.giustiziamministrativa.it/african-women-dating.html sykepleier porno

scam online dating - https://dating-norge.giustiziamministrativa.it/scam-online-dating.html actrite porno

kristen dating side - https://datingsider-norge.giustiziamministrativa.it/kristen-dating-side.htm porno gify bedste dating app - https://nettdating-gratis.giustiziamministrativa.it/bedste-dating-app.htm lebisk porno dansk gratis porno - https://dating-norge.giustiziamministrativa.it/dansk-gratis-porno.html free norwegian porno

kurdish porno - https://datingsider-norge.giustiziamministrativa.it/kurdish-porno.htm porno chat

free polskie amatorki porno - https://norsk-porno.giustiziamministrativa.it/polskie-amatorki-porno.html senior dating 60+ filme noi porno - https://norsk-porno.giustiziamministrativa.it/filme-noi-porno.html latino porno sex dating

sites - https://dating-norge.giustiziamministrativa.it/sex-dating-sites.html porno

modne damer dokumentar porno - https://nettdating-gratis.giustiziamministrativa.it/dokumentar-porno.htm bbw milf porno best free dating

apps - https://dating-norge.giustiziamministrativa.it/best-free-dating-apps.html retro

porno porno hubb - https://datingsider-norge.giustiziamministrativa.it/porno-hubb.htm masturbacja

porno best teen porno - https://nettdating-gratis.giustiziamministrativa.it/best-teen-porno.htm owlosione porno gretchen porno - https://gratis-porno.giustiziamministrativa.it/gretchen-porno.html

darmowe porno animals free norway dating site - https://gratis-porno.giustiziamministrativa.it/free-norway-dating-site.html cuckold porno filmy porno za darmo

- https://datingsider-norge.giustiziamministrativa.it/filmy-porno-za-darmo.htm fri porno film porno

mov - https://norsk-porno.giustiziamministrativa.it/porno-mov.html desi dating porno torture -

https://giustiziamministrativa.it/porno-torture.htm porno 3d

100 free dating sites - https://norsk-porno.giustiziamministrativa.it/100-free-dating-sites.html www free porno

mom nylon porno - https://dating-norge.giustiziamministrativa.it/mom-nylon-porno.html porno grattis porno bobs - https://datingsider-norge.giustiziamministrativa.it/porno-bobs.htm

albansk porno svensk dating site - https://norsk-porno.giustiziamministrativa.it/svensk-dating-site.html fristemeg dating

crosdresser porno - https://nettdating-gratis.giustiziamministrativa.it/crosdresser-porno.htm dating in denmark

dansk gratis porno - https://dating-norge.giustiziamministrativa.it/dansk-gratis-porno.html 50 dating

darmowe filmy porno orzel https://datingsider-norge.giustiziamministrativa.it/just-porno.htm nordisk porno https://gratis-porno.giustiziamministrativa.it/dating-tromso.html dating

for singles https://datingsider-norge.giustiziamministrativa.it/dating-for-gifte.htm porno

strong https://nettdating-gratis.giustiziamministrativa.it/live-porno-free.htm porno

nasilvane https://datingsider-norge.giustiziamministrativa.it/8-porno.htm porno lt https://gratis-porno.giustiziamministrativa.it/shemale-porno-video.html dating

i norge https://norsk-porno.giustiziamministrativa.it/old-mann-porno.html porno se gratis https://gratis-porno.giustiziamministrativa.it/kris-humphries-dating.html besplatni porno https://gratis-porno.giustiziamministrativa.it/ladyboy-dating.html lietuvaiciu porno https://gratis-porno.giustiziamministrativa.it/young-porno.html best porno side https://gratis-porno.giustiziamministrativa.it/trygg-porno.html juegos porno https://gratis-porno.giustiziamministrativa.it/bajki-porno.html porno eu https://datingsider-norge.giustiziamministrativa.it/amatorskie-porno.htm gravid

dating https://norsk-porno.giustiziamministrativa.it/gamer-porno.html darmowe porno nastolatki https://datingsider-norge.giustiziamministrativa.it/bezplatne-filmy-porno.htm porno skandinavia https://gratis-porno.giustiziamministrativa.it/online-ukraine-dating-site.html mature women dating https://dating-norge.giustiziamministrativa.it/lituviskas-porno.html dating tinder https://gratis-porno.giustiziamministrativa.it/porno-vita.html gratis porno sider https://datingsider-norge.giustiziamministrativa.it/utro-dating-sider.htm porno mexicano https://datingsider-norge.giustiziamministrativa.it/porno-hjemme.htm japanese porno tube https://datingsider-norge.giustiziamministrativa.it/8-porno.htm dubai porno

https://nettdating-gratis.giustiziamministrativa.it/porno-nudist.htm sexs

porno https://nettdating-gratis.giustiziamministrativa.it/james-franco-dating.htm italian milf

porno https://dating-norge.giustiziamministrativa.it/18-ar-porno.html dating a norwegian https://nettdating-gratis.giustiziamministrativa.it/filipinsk-porno.htm bezplatne filmy porno

ср, 2019-05-22 01:02

Страницы

Комментировать