Въведение в разработването на слайдшоу в JavaScript. Създаване на плъзгач за снимки с помощта на чист javascript Подготовка на изображения за плъзгача

Ако слайдовете съдържат само снимки, можете леко да промените структурата:

Предишен Следващ

Не забравяйте да добавите значима стойност към атрибута alt.

За да използвате връзки към страници, можете да направите следното:

... ... ... 1 2 3

Предишен Следващ 1 2 3

Обърнете внимание на използването на атрибути „данни“ - някои слайдшоута могат да вмъкват картини като фон и тези атрибути ще се използват в скрипта като места за свързване на фона и слайда.

Използване на списъци Семантично правилен подход би бил да се използват елементи от списък като слайдове. В този случай структурата ще бъде следната:

Ако редът на слайдовете е добре определен (например в презентация), можете да използвате номерирани списъци

CSS Нека започнем със следната структура:

Предишен Следващ

защото Тъй като слайдшоуто ще върви отдясно наляво, външният контейнер ще има фиксиран размер, а вътрешният ще бъде по-широк, тъй като съдържа всички слайдове. Първият слайд ще бъде видим. Това се задава чрез препълване:

Плъзгач (ширина: 1024px; преливане: скрит;) .slider-wrapper (ширина: 9999px; височина: 683px; позиция: относителна; преход: ляво 500ms линеен;)

Стиловете на вътрешната обвивка включват:

Голяма ширина
- фиксирана височина, максимална височина на плъзгача
- позиция: относителна, което ще ви позволи да създадете движение на слайд
- CSS преход наляво, което ще направи движението гладко. За простота не сме включили всички префикси. Можете също да използвате CSS трансформации (заедно с превод) за това.

Слайдовете имат атрибут float, за да ги подредят. Те са разположени относително така, че да можете да получите лявото им изместване в JS. Използваме го, за да създадем ефект на плъзгане.

Плъзгане (плаващ: ляв; позиция: относителна; ширина: 1024px; височина: 683px;)

Въпреки че сме задали определена ширина, в скрипта можем да я променим, като умножим броя на слайдовете по ширината на слайда. Никога не знаете каква ширина може да имате нужда.

Навигацията се осъществява чрез бутоните “Назад” и “Следващ”. Нулираме техните стилове по подразбиране и присвояваме наши собствени:

Slider-nav (височина: 40px; ширина: 100%; margin-top: 1.5em; ) .slider-nav бутон (border: none; display: block; width: 40px; height: 40px; cursor: pointer; text-indent : -9999em; цвят на фона: прозрачен; повторение на фона: без повторение;) .slider-nav button.slider-previous ( float: ляво; background-image: url(previous.png); ) .slider-nav бутон .slider-next ( float: дясно; фоново изображение: url(next.png); )

Когато използвате връзки към страници вместо бутони, можете да създадете следните стилове:

Slider-nav (text-align: center; margin-top: 1.5em;) .slider-nav a ( display: inline-block; text-decoration: none; border: 1px solid #ddd; color: #444; width: 2em; височина: 2em; line-height: 2; text-align: center; ) .slider-nav a.current ( border-color: #000; color: #000; font-weight: bold; )

Тези класове ще бъдат присвоявани динамично от скрипта.

Този подход е подходящ за ефекта на плъзгане. Ако искаме да постигнем ефекта на избледняване, трябва да променим стиловете, тъй като float добавя хоризонтална подложка между слайдовете. Тоест, нямаме нужда от слайдове на един ред - имаме нужда от „пакет“ от слайдове:

Плъзгач (ширина: 1024px; поле: 2em автоматично; ) .slider-wrapper (ширина: 100%; височина: 683px; позиция: относителна; /* Създава контекст за абсолютно позициониране */) .slide (позиция: абсолютна; /* Абсолютно позициониране на всички слайдове */ ширина: 100%; височина: 100%; непрозрачност: 0; /* Всички слайдове са скрити */ преход: непрозрачност 500ms линеен; ) /* Първоначално се вижда само първият */ .slider- обвивка >
Използваме свойството opacity, за да скрием слайдовете, защото екранните четци ще пропуснат съдържанието на елементи, които имат display: none (вижте CSS в действие: Невидимо съдържание само за потребители на екранни четци).

Благодарение на CSS контекстното позициониране, ние създадохме „стек“ от слайдове, като последният слайд в източника е пред останалите. Но това не е това, от което се нуждаем. За да запазим реда на слайдовете, трябва да скрием всички слайдове с изключение на първия.

JS използва CSS преход, променя стойността на свойството opacity на текущия слайд и нулира тази стойност за всички останали.

JavaScript код Слайдшоу без пагиниране Слайдшоу без пагиниране работи, като щракнете върху бутоните „Напред“ и „Предишен“. Те могат да се разглеждат като оператори за увеличаване и намаляване. Винаги има показалец (или курсор), който ще се увеличава или намалява при всяко натискане на бутоните. Първоначалната му стойност е 0, а целта е да се избере текущият слайд по същия начин, по който се избират елементите на масива.

Така че, когато щракнете върху Напред първия път, показалецът се увеличава с 1 и получаваме втори слайд. Щраквайки върху Предишен, намаляваме показалеца и получаваме първия слайд. и т.н.

Заедно с показалеца използваме метода .eq() на jQuery, за да получим текущия слайд. В чист JS изглежда така:

Функция Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.slides = this.el.querySelectorAll(".slide") ; //...), _slideTo: функция (показател) ( var currentSlide = this.slides; //... ));

Запомнете - NodeList използва индекси точно като масив. Друг начин за избор на текущия слайд е с CSS3 селектори:

Slideshow.prototype = ( init: function() ( //...), _slideTo: function(pointer) ( var n = pointer + 1; var currentSlide = this.el.querySelector(".slide:nth-child(" + n + ")"); //... ) );

Селекторът CSS3:nth-child() брои елементи, започвайки от 1, така че трябва да добавите 1 към показалеца. След като изберете слайд, неговият родителски контейнер трябва да се премести отдясно наляво. В jQuery можете да използвате метода .animate():

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", слайдове: ".slide", //... скорост: 500, облекчаване : "linear" ), опции); var slideTo = function(slide, element) ( var $currentSlide = $(options.slides, element).eq(slide); $(options.wrapper, element). animate(( ляв : - $currentSlide.position().left ), options.speed, options.easing); ); //... ); ))(jQuery);

В обикновения JS няма метод .animate(), затова използваме CSS преходи:

Slider-wrapper (позиция: относителна; // необходим преход: ляво 500ms линеен;)

Сега можете да промените лявото свойство динамично чрез стиловия обект:

Функция Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector(".slider-wrapper "); this.slides = this.el.querySelectorAll(".slide"); //... ), _slideTo: функция (показател) ( var currentSlide = this.slides; this.wrapper.style.left = "- " + currentSlide.offsetLeft + "px"; ) );

Сега трябва да създадем събитие за кликване за всяка контрола. В jQuery можете да използвате метода .on(), а в чистия JS можете да използвате метода addEventListener().

Трябва също така да проверите дали показалецът е достигнал границите на списъка - 0 за „Назад“ и общия брой слайдове за „Следващ“. Във всеки случай трябва да скриете съответния бутон:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", слайдове: ".slide", предишен: ".slider-previous", следващ : ".slider-next", //... скорост: 500, облекчаване: "linear" ), опции); var slideTo = функция(слайд, елемент) ( var $currentSlide = $(options.slides, елемент). eq(slide); $(options.wrapper, element).animate(( left: - $currentSlide.position().left), options.speed, options.easing); ); return this.each(function() ( var $element = $(this), $previous = $(options.previous, $element), $next = $(options.next, $element), index = 0, total = $(options.slides).length; $next.on("click", function() ( index++; $previous.show(); if(index == total - 1) ( index = total - 1; $next.hide(); ) slideTo(index, $element); )); $previous.on("click", function() ( index--; $next.show(); if(index == 0) ( index = 0; $previous.hide(); ) slideTo(index, $element); )); )); ); ))(jQuery);

И в чист JS изглежда така:

Функция Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector(".slider-wrapper "); this.slides = this.el.querySelectorAll(".slide"); this.previous = this.el.querySelector(".slider-previous"); this.next = this.el.querySelector(".slider -следващ"); this.index = 0; this.total = this.slides.length; this.actions(); ), _slideTo: функция (показател) ( var currentSlide = this.slides; this.wrapper.style.left = "-" + currentSlide.offsetLeft + "px"; ), действия: function() ( var self = this; self.next.addEventListener("click", function() ( self.index++; self.previous.style. display = "block"; if(self.index == self.total - 1) ( self.index = self.total - 1; self.next.style.display = "none"; ) self._slideTo(self.index ); ), false); self.previous.addEventListener("click", function() ( self.index--; self.next.style.display = "block"; if(self.index == 0) ( self .index = 0;self.previous.style.display = "няма"; ) self._slideTo(self.index); ), невярно); ) );

Странирано слайдшоу В този тип слайдшоу всяка връзка отговаря за един слайд, така че няма нужда от индекс. Анимациите не се променят, а начинът, по който потребителят се движи през слайдовете, го прави. За jQuery ще имаме следния код:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", слайдове: ".slide", nav: ".slider-nav", скорост : 500, облекчаване: "линеен" ), опции); var slideTo = function(slide, element) ( var $currentSlide = $(options.slides, element).eq(slide); $(options.wrapper, element). animate(( left: - $currentSlide.position().left), options.speed, options.easing); return this.each(function() ( var $element = $(this), $navigationLinks = $( "a", options.nav); $navigationLinks.on("click", function(e) ( e.preventDefault(); var $a = $(this), $slide = $($a.attr("href) ")); slideTo($slide, $element); $a.addClass("current").siblings(). removeClass("current"); )); )); ))(jQuery);

В този случай всяка котва съответства на идентификатора на конкретен слайд. В чист JS можете да използвате както него, така и атрибута data, който съхранява цифровия индекс на слайдовете в NodeList:

Функция Slider(element) ( this.el = document.querySelector(element); this.init(); ) Slider.prototype = ( init: function() ( this.links = this.el.querySelectorAll("#slider-nav a"); this.wrapper = this.el.querySelector("#slider-wrapper"); this.navigate(); ), navigate: function() ( for (var i = 0; i< this.links.length; ++i) { var link = this.links[i]; this.slide(link); } }, slide: function(element) { var self = this; element.addEventListener("click", function(e) { e.preventDefault(); var a = this; self.setCurrentLink(a); var index = parseInt(a.getAttribute("data-slide"), 10) + 1; var currentSlide = self.el.querySelector(".slide:nth-child(" + index + ")"); self.wrapper.style.left = "-" + currentSlide.offsetLeft + "px"; }, false); }, setCurrentLink: function(link) { var parent = link.parentNode; var a = parent.querySelectorAll("a"); link.className = "current"; for (var j = 0; j < a.length; ++j) { var cur = a[j]; if (cur !== link) { cur.className = ""; } } } };

От IE10 можете да управлявате класове чрез classList:

Link.classList.add("текущ");

А с IE11 атрибутите на данните могат да бъдат получени чрез свойството набор от данни:

Var index = parseInt(a.dataset.slide, 10) + 1;

Странирани слайдшоута с контроли Тези слайдшоута представляват известна сложност за кода - трябва да комбинирате използването на хешове на индекси и страници. Тоест, текущият слайд трябва да бъде избран както на базата на позицията на показалеца, така и на слайда, избран чрез връзки.

Това може да се синхронизира чрез числовия индекс на всяка връзка в DOM. Една връзка - един слайд, така че техните индекси ще бъдат 0, 1, 2 и т.н.

В jQuery кодът ще бъде така:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( //... пагинация: ".slider-pagination", //...), опции); $. fn.slideshow.index = 0; return this.each(function() ( var $element = $(this), //... $pagination = $(options.pagination, $element), $paginationLinks = $(" a", $pagination), //... $paginationLinks.on("click", function(e) ( e.preventDefault(); var $a = $(this), elemIndex = $a.index(); // DOM цифров индекс $.fn.slideshow.index = elemIndex; if($.fn.slideshow.index > 0) ( $previous.show(); ) else ( $previous.hide(); ) if($. fn.slideshow.index == общо - 1) ( $.fn.slideshow.index = общо - 1; $next.hide(); ) else ( $next.show(); ) slideTo($.fn.slideshow. индекс, $element); $a.addClass("текущ"). siblings().removeClass("текущ"); )); )); ); //... ))(jQuery);

Веднага можете да видите, че видимостта на курсора се е променила - индексът вече е деклариран като свойство на обекта за слайдшоу. По този начин избягваме проблеми с обхвата, които могат да бъдат създадени от обратни извиквания в jQuery. Курсорът вече е достъпен навсякъде, дори извън пространството на имената на приставката, тъй като е деклариран като публично свойство на обекта на слайдшоуто.

Методът .index() дава цифровия индекс на всяка връзка.

Няма такъв метод в чист JS, така че е по-лесно да използвате атрибути на данни:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector( ".slider-wrapper"); this.slides = this.el.querySelectorAll(".slide"); this.previous = this.el.querySelector(".slider-previous"); this.next = this.el. querySelector(".slider-next"); this.navigationLinks = this.el.querySelectorAll(".slider-pagination a"); this.index = 0; this.total = this.slides.length; this.setup() ; this.actions(); ), //... настройка: функция() ( var self = this; //... for(var k = 0; k< self.navigationLinks.length; ++k) { var pagLink = self.navigationLinks[k]; pagLink.setAttribute("data-index", k); // Или pagLink.dataset.index = k; } }, //... }; })();

Сега можем да свържем нашите процедури с препратки и да използваме атрибутите на данните, които току-що създадохме:

Действия: function() ( var self = this; //... for(var i = 0; i< self.navigationLinks.length; ++i) { var a = self.navigationLinks[i]; a.addEventListener("click", function(e) { e.preventDefault(); var n = parseInt(this.getAttribute("data-index"), 10); // Или var n = parseInt(this.dataset.index, 10); self.index = n; if(self.index == 0) { self.index = 0; self.previous.style.display = "none"; } if(self.index >0) ( self.previous.style.display = "block"; ) if(self.index == self.total - 1) ( self.index = self.total - 1; self.next.style.display = "none "; ) else ( self.next.style.display = "block"; ) self._slideTo(self.index); self._highlightCurrentLink(this); ), невярно); ) )

Разбиране на размерите Нека се върнем към следното CSS правило:

Slider-wrapper (ширина: 9999px; височина: 683px; позиция: относителна; преход: ляво 500ms линеен;)

Ако имаме много слайдове, тогава 9999 може да не са достатъчни. Трябва да коригирате размерите на слайдовете в движение въз основа на ширината на всеки слайд и броя на слайдовете.

В jQuery е просто:

// Слайдшоу с пълна ширина връща this.each(function() ( var $element = $(this), total = $(options.slides).length; //... $(options.slides, $element ).width ($(window).width()); $(options.wrapper, $element).width($(window).width() * total); //... ));

Вземете ширината на прозореца и задайте ширината на всеки слайд. Общата ширина на вътрешната обвивка се получава чрез умножаване на ширината на прозореца и броя на слайдовете.

// Слайдшоу с фиксирана ширина return this.each(function() ( var $element = $(this), total = $(options.slides).length; //... $(options.wrapper, $element) .width ($(options.slides).eq(0).width() * общо); //... ));

Тук първоначалната ширина е зададена на ширината на всеки слайд. Просто трябва да зададете общата ширина на обвивката.

Вътрешният контейнер вече е достатъчно широк. В чист JS това се прави приблизително по същия начин:

// Слайдшоу с пълна ширина Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector(".slider-wrapper"); this.slides = this.el.querySelectorAll(".slide "); //... this.total = this.slides.length; this.setDimensions(); this.actions(); ), setDimensions: function() ( var self = this; // Viewport"s width var winWidth = window .innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var wrapperWidth = winWidth * self.total; for(var i = 0; i< self.total; ++i) { var slide = self.slides[i]; slide.style.width = winWidth + "px"; } self.wrapper.style.width = wrapperWidth + "px"; }, //... }; // Слайд-шоу фиксированной ширины Slideshow.prototype = { init: function() { this.wrapper = this.el.querySelector(".slider-wrapper"); this.slides = this.el.querySelectorAll(".slide"); //... this.total = this.slides.length; this.setDimensions(); this.actions(); }, setDimensions: function() { var self = this; var slideWidth = self.slides.offsetWidth; // Single slide"s width var wrapperWidth = slideWidth * self.total; self.wrapper.style.width = wrapperWidth + "px"; }, //... };

Ефекти на избледняване Ефектите на избледняване често се използват в слайдшоута. Текущият слайд изчезва и се появява следващият. jQuery има методи fadeIn() и fadeOut(), които работят както със свойствата на opacity, така и с display, така че елементът се премахва от страницата, когато анимацията завърши (display:none).

В чист JS е най-добре да работите със свойството opacity и да използвате стека за позициониране на CSS. Тогава първоначално слайдът ще бъде видим (непрозрачност: 1), а останалите ще бъдат скрити (непрозрачност: 0).

Следният набор от стилове демонстрира този метод:

Плъзгач (ширина: 100%; преливане: скрито; позиция: относителна; височина: 400px;) .slider-wrapper (ширина: 100%; височина: 100%; позиция: относителна;) .slide (позиция: абсолютна; ширина: 100 %; височина: 100%; непрозрачност: 0; ) .slider-wrapper > .slide:first-child (непрозрачност: 1; )

В чист JS трябва да регистрирате CSS прехода на всеки слайд:

Плъзгане (плаващо: ляво; позиция: абсолютно; ширина: 100%; височина: 100%; непрозрачност: 0; преход: непрозрачност 500ms линейно; )

С jQuery, за да използвате методите fadeIn() и fadeOut(), трябва да промените непрозрачността и дисплея:

Плъзгане ( float: ляво; позиция: абсолютна; ширина: 100%; височина: 100%; дисплей: няма; ) .slider-wrapper > .slide:first-child ( display: block; )

В jQuery кодът е както следва:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", предишен: ".slider-предишен", следващ: ".slider-next" , слайдове: ".slide", nav: ".slider-nav", скорост: 500, облекчаване: "linear" ), опции); var slideTo = функция (слайд, елемент) ( var $currentSlide = $(options.slides , element).eq(slide); $currentSlide. animate((opacity: 1), options.speed, options.easing). siblings(options.slides). css("opacity", 0); ); //. .. ); ))(jQuery);

Когато анимирате непрозрачност, трябва също да промените стойностите на това свойство за останалите слайдове.

В JavaScript би било:

Slideshow.prototype = ( //... _slideTo: function(slide) ( var currentSlide = this.slides; currentSlide.style.opacity = 1; for(var i = 0; i< this.slides.length; i++) { var slide = this.slides[i]; if(slide !== currentSlide) { slide.style.opacity = 0; } } }, //... };

Медийни елементи: Видео Можем да включим видео в слайдшоу. Ето пример за видео слайдшоу от Vimeo:

Видеоклиповете се включват чрез iframe. Това е същият сменяем вграден блок като на снимката. Заменяем – защото съдържанието е взето от външен източник.

За да създадете слайдшоу на цяла страница, трябва да промените стиловете, както следва:

Html, тяло ( margin: 0; padding: 0; height: 100%; min-height: 100%; /* Height трябва да бъде цялата страница */) .slider ( width: 100%; overflow: hidden; height: 100 %; мин. височина: 100%; /* Височина и ширина до пълна */ позиция: абсолютна; /* Абсолютно позициониране */ ) .slider-wrapper ( ширина: 100%; височина: 100%; /* Височина и ширина до пълен */ позиция: относителна; ) .slide ( float: ляво; позиция: абсолютна; ширина: 100%; височина: 100%; ) .slide iframe ( дисплей: блок; /* Блоков елемент */ позиция: абсолютна; /* Абсолютно позициониране */ ширина: 100%; височина: 100%; /* Пълна височина и ширина */ )

Автоматични слайдшоута Автоматичните слайдшоута използват таймери. Всеки път, когато функцията на таймера setInterval() бъде извикана обратно, курсорът ще се увеличава с 1 и по този начин ще бъде избран следващият слайд.

Когато курсорът достигне максималния брой слайдове, той трябва да бъде нулиран.

Безкрайните слайдшоута бързо стават скучни за потребителите. Най-добрата практика е да спрете анимацията, когато потребителят задържи курсора на мишката върху нея и да възобновите, когато курсорът се отдалечи.

(function($) ( $.fn.slideshow = function(options) ( options = $.extend(( slides: ".slide", speed: 3000, easing: "linear"), options); var timer = null; // Таймер var index = 0; // Курсор var slideTo = function(slide, element) ( var $currentSlide = $(options.slides, element).eq(slide); $currentSlide.stop(true, true). animate (( opacity: 1), options.speed, options.easing). siblings(options.slides). css("opacity", 0); ); var autoSlide = function(element) ( // Инициализиране на таймера за последователност = setInterval ( function() ( index++; // Увеличаване на курсора с 1 if(index == $(options.slides, element).length) ( index = 0; // Нулиране на курсора) slideTo(index, element); ), options.speed); // Същият интервал като в method.animate()); var startStop = function(element) ( element.hover(function() ( // Спиране на анимацията clearInterval(timer); timer = null; ), function () ( autoSlide(element); // Възобновяване на анимацията )); ); return this.each(function() ( var $element = $(this); autoSlide($element); startStop($element); )); ); ))(jQuery);

И двата параметъра на метода .stop() са зададени на true, защото не е необходимо да създаваме опашка за анимация от нашата последователност.

В чист JS кодът става по-опростен. Регистрираме CSS преход за всеки слайд с определена продължителност:

Слайд (преход: непрозрачност 3s линеен; /* 3 секунди = 3000 милисекунди */)

И кодът ще бъде така:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.slides = this.el.querySelectorAll( ".slide"); this.index = 0; // Курсор this.timer = null; // Таймер this.action(); this.stopStart(); ), _slideTo: функция (слайд) ( var currentSlide = this. слайдове; currentSlide.style.opacity = 1; for(var i = 0; i< this.slides.length; i++) { var slide = this.slides[i]; if(slide !== currentSlide) { slide.style.opacity = 0; } } }, action: function() { var self = this; // Initializes the sequence self.timer = setInterval(function() { self.index++; // Увеличим курсор на 1 if(self.index == self.slides.length) { self.index = 0; // Обнулим курсор } self._slideTo(self.index); }, 3000); // Тот же интервал, что и у перехода CSS }, stopStart: function() { var self = this; // Останавливаем анимацию self.el.addEventListener("mouseover", function() { clearInterval(self.timer); self.timer = null; }, false); // Возобновляем анимацию self.el.addEventListener("mouseout", function() { self.action(); }, false); } }; })();

Навигация с клавиатура Разширените слайдшоута предлагат навигация с клавиатура, т.е. Превъртете през слайдовете, като натискате клавишите. За нас това просто означава, че трябва да регистрираме обработката на събитието за натискане на клавиш.

За да направим това, ще имаме достъп до свойството keyCode на обекта на събитието. Връща кода на натиснатия клавиш (списък с кодове).

Тези събития, които прикачихме към бутоните „Назад“ и „Напред“, сега могат да бъдат прикачени към клавишите „ляво“ и „десно“. jQuery:

$("body").on("keydown", function(e) ( var code = e.keyCode; if(code == 39) ( // Лява стрелка $next.trigger("click"); ) if( код == 37) ( // Стрелка надясно $previous.trigger("click"); ) ));

В чист JS, вместо простия метод .trigger(), ще трябва да използвате dispatchEvent():

Document.body.addEventListener("keydown", function(e) ( var code = e.keyCode; var evt = new MouseEvent("click"); // щракване с мишката if(code == 39) ( // Лява стрелка self .next.dispatchEvent(evt); ) if(code == 37) ( // Дясна стрелка self.previous.dispatchEvent(evt); ) ), false);

В приличните проекти не е обичайно да се прави това. Ще трябва да дефинираме функционалността, която осигурява обръщане в публичен метод, и след това да го извикаме, когато се щракне върху бутона. След това, ако друга част от програмата трябва да приложи тази функционалност, няма да има нужда да емулира DOM събития, а може просто да извика този метод.

Обратни извиквания Би било хубаво да можете да прикачите някакъв код към всяко действие на слайдшоу, което ще се изпълни, когато това действие се извърши. Това е целта на функциите за обратно извикване - те се изпълняват само когато се случи определено действие. Да приемем, че нашето слайдшоу има надписи и те са скрити по подразбиране. По време на анимацията трябва да покажем надпис за текущия слайд или дори да направим нещо с него.

В jQuery можете да създадете обратно извикване като това:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( //... обратно извикване: функция() () ), опции); var slideTo = функция(слайд, елемент) ( var $currentSlide = $(options.slides, element).eq(slide); $currentSlide. animate(( opacity: 1), options.speed, options.easing, // Обратно извикване за текущия слайд options.callback($ currentSlide)). siblings(options.slides). css("opacity", 0); ); //... ); ))(jQuery);

В този случай обратното извикване е функция от .animate(), която приема текущия слайд като аргумент. Ето как можете да го използвате:

$(function() ( $("#main-slider").slideshow(( callback: function(slide) ( var $wrapper = slide.parent(); // Показва текущия надпис и скрива останалите $wrapper.find (" .slide-caption").hide(); slide.find(".slide-caption").show("slow"); ) )); ));

В чист JS:

(function() ( function Slideshow(element, callback) ( this.callback = callback || function()); // Нашето обратно извикване this.el = document.querySelector(element); this.init(); ) Слайдшоу. прототип = ( init: function() ( //... this.slides = this.el.querySelectorAll(".slide"); //... //...), _slideTo: function(slide) ( var self = това; var currentSlide = self.slides; currentSlide.style.opacity = 1; for(var i = 0; i< self.slides.length; i++) { var slide = self.slides[i]; if(slide !== currentSlide) { slide.style.opacity = 0; } } setTimeout(self.callback(currentSlide), 500); // Вызывает функцию по окончанию перехода } }; // })();

Функцията за обратно извикване е дефинирана като втори параметър на конструктора. Можете да го използвате по следния начин:

Document.addEventListener("DOMContentLoaded", function() ( var slider = new Slideshow("#main-slider", function(slide) ( var wrapper = slide.parentNode; // Показва текущия надпис и скрива останалите var allSlides = обвивка. querySelectorAll(".slide"); var caption = slide.querySelector(".slide-caption"); caption.classList.add("visible"); for(var i = 0; i< allSlides.length; ++i) { var sld = allSlides[i]; var cpt = sld.querySelector(".slide-caption"); if(sld !== slide) { cpt.classList.remove("visible"); } } }); });

Външни API Досега нашият работен сценарий е прост: всички слайдове вече са в документа. Ако трябва да вмъкнем данни в него отвън (YouTube, Vimeo, Flickr), трябва да попълваме слайдовете в движение, докато получаваме външно съдържание.

Тъй като отговорът от сървъра на трета страна може да не е незабавен, трябва да вмъкнете анимация за зареждане, за да покажете, че процесът е в ход:

Предишен Следващ

Може да бъде gif или чиста CSS анимация:

#spinner ( border-radius: 50%; border: 2px solid #000; height: 80px; width: 80px; position: absolute; top: 50%; left: 50%; margin: -40px 0 0 -40px; ) # spinner:after (съдържание: ""; позиция: абсолютна; цвят на фона: #000; горе:2px; ляво: 48%; височина: 38px; ширина: 2px; радиус на границата: 5px; -webkit-transform-origin: 50% 97%; transform-origin: 50% 97%; -webkit-animation: angular 1s linear infinite; animation: angular 1s linear infinite; ) @-webkit-keyframes angular ( 0%(-webkit-transform:rotate(0deg) );) 100%(-webkit-transform:rotate(360deg);) ) @keyframes angular ( 0%(transform:rotate(0deg);) 100%(transform:rotate(360deg);) ) #spinner:before ( съдържание: ""; позиция: абсолютна; цвят на фона: #000; горе: 6px; ляво: 48%; височина: 35px; ширина: 2px; радиус на границата: 5px; -webkit-transform-origin: 50% 94% ; transform-origin: 50% 94%; -webkit-animation: ptangular 6s linear infinite; анимация: ptangular 6s linear infinite; ) @-webkit-keyframes ptangular ( 0%(-webkit-transform:rotate(0deg);) 100 %(-webkit-transform:rotate(360deg);) ) @keyframes ptangular ( 0%(transform:rotate(0deg);) 100%(transform:rotate(360deg);) )

Стъпките ще бъдат така:
- изискване на данни отвън
- скриване на буутлоудъра
- анализира данни
- изграждане на HTML
- показване на слайдшоу
- процес на слайдшоута

Да речем, че избираме най-новите видеоклипове на даден потребител от YouTube. jQuery:

(function($) ( $.fn.slideshow = function(options) ( options = $.extend(( wrapper: ".slider-wrapper", //... loader: "#spinner", //... ограничение: 5, потребителско име: "learncodeacademy" ), опции); //... var getVideos = function() ( // Вземете видеоклипове от YouTube var ytURL = "https://gdata.youtube.com/feeds/api/ videos?alt=json&author=" + options.username + "&max-results=" + options.limit; $.getJSON(ytURL, function(videos) ( // Вземете видеоклипа като JSON обект $(options.loader). hide(); // Скриване на зареждащия модул var entries = videos.feed.entry; var html = ""; for(var i = 0; i< entries.length; ++i) { // Разбираем данные и строим строку HTML var entry = entries[i]; var idURL = entry.id.$t; var idVideo = idURL.replace("http://gdata.youtube.com/feeds/api/videos/", ""); var ytEmbedURL = "https://www.youtube.com/embed/" + idVideo + "?rel=0&showinfo=0&controls=0"; html += ""; html += ""; html += ""; } $(options.wrapper).html(html); // Выведем слайд-шоу }); }; return this.each(function() { //... getVideos(); // Обрабатываем слайд-шоу }); }; })(jQuery);

В чистия JavaScript има допълнителна стъпка - създаване на метод за получаване на JSON:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector( ".slider-wrapper"); this.loader = this.el.querySelector("#spinner"); //... this.limit = 5; this.username = "learncodeacademy"; ), _getJSON: функция (url , обратно извикване) ( обратно извикване = обратно извикване || функция() (); var заявка = нов XMLHttpRequest(); request.open("GET", url, true); request.send(null); request.onreadystatechange = function() ( if (request.status == 200 && request.readyState == 4) ( var data = JSON.parse(request.responseText); // Обратно извикване на JSON обект (данни); ) else ( console.log(request.status) ; ) ); ), //... ); ))();

Тогава процедурите са подобни:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector( ".slider-wrapper"); this.loader = this.el.querySelector("#spinner"); //... this.limit = 5; this.username = "learncodeacademy"; this.actions(); ) , _getJSON: функция(url, обратно извикване) ( обратно извикване = обратно извикване || функция(); var заявка = нов XMLHttpRequest(); request.open("GET", url, true); request.send(null); заявка .onreadystatechange = функция() ( if (request.status == 200 && request.readyState == 4) ( var data = JSON.parse(request.responseText); // Обратно извикване на JSON обект (данни); ) else ( console. log( request.status); ) ); ), //... getVideos: function() ( var self = this; // Вземете видео от YouTube var ytURL = "https://gdata.youtube.com/feeds/api /videos ?alt=json&author=" + self.username + "&max-results=" + self.limit; self._getJSON(ytURL, function(videos) ( // Вземете видеото като JSON обект var entries = videos.feed.entry ; var html = ""; self.loader.style.display = "няма"; // Скриване на товарача за (var i = 0; i< entries.length; ++i) { // Разбираем данные и строим строку HTML var entry = entries[i]; var idURL = entry.id.$t; var idVideo = idURL.replace("http://gdata.youtube.com/feeds/api/videos/", ""); var ytEmbedURL = "https://www.youtube.com/embed/" + idVideo + "?rel=0&showinfo=0&controls=0"; html += ""; html += ""; html += ""; } self.wrapper.innerHTML = html; // Выводим слайд-шоу }); }, actions: function() { var self = this; self.getVideos(); // Обрабатываем слайд-шоу } }; })(); Добавить метки

Ако слайдовете съдържат само снимки, можете леко да промените структурата:

Предишен Следващ

Не забравяйте да добавите значима стойност към атрибута alt.

За да използвате връзки към страници, можете да направите следното:

... ... ... 1 2 3

Предишен Следващ 1 2 3

Обърнете внимание на използването на атрибути „данни“ - някои слайдшоута могат да вмъкват картини като фон и тези атрибути ще се използват в скрипта като места за свързване на фона и слайда.

Използване на списъци Семантично правилен подход би бил да се използват елементи от списък като слайдове. В този случай структурата ще бъде следната:

Ако редът на слайдовете е добре определен (например в презентация), можете да използвате номерирани списъци

CSS Нека започнем със следната структура:

Предишен Следващ

защото Тъй като слайдшоуто ще върви отдясно наляво, външният контейнер ще има фиксиран размер, а вътрешният ще бъде по-широк, тъй като съдържа всички слайдове. Първият слайд ще бъде видим. Това се задава чрез препълване:

Плъзгач (ширина: 1024px; преливане: скрит;) .slider-wrapper (ширина: 9999px; височина: 683px; позиция: относителна; преход: ляво 500ms линеен;)

Стиловете на вътрешната обвивка включват:

Голяма ширина
- фиксирана височина, максимална височина на плъзгача
- позиция: относителна, което ще ви позволи да създадете движение на слайд
- CSS преход наляво, което ще направи движението гладко. За простота не сме включили всички префикси. Можете също да използвате CSS трансформации (заедно с превод) за това.

Слайдовете имат атрибут float, за да ги подредят. Те са разположени относително така, че да можете да получите лявото им изместване в JS. Използваме го, за да създадем ефект на плъзгане.

Плъзгане (плаващ: ляв; позиция: относителна; ширина: 1024px; височина: 683px;)

Въпреки че сме задали определена ширина, в скрипта можем да я променим, като умножим броя на слайдовете по ширината на слайда. Никога не знаете каква ширина може да имате нужда.

Навигацията се осъществява чрез бутоните “Назад” и “Следващ”. Нулираме техните стилове по подразбиране и присвояваме наши собствени:

Slider-nav (височина: 40px; ширина: 100%; margin-top: 1.5em; ) .slider-nav бутон (border: none; display: block; width: 40px; height: 40px; cursor: pointer; text-indent : -9999em; цвят на фона: прозрачен; повторение на фона: без повторение;) .slider-nav button.slider-previous ( float: ляво; background-image: url(previous.png); ) .slider-nav бутон .slider-next ( float: дясно; фоново изображение: url(next.png); )

Когато използвате връзки към страници вместо бутони, можете да създадете следните стилове:

Slider-nav (text-align: center; margin-top: 1.5em;) .slider-nav a ( display: inline-block; text-decoration: none; border: 1px solid #ddd; color: #444; width: 2em; височина: 2em; line-height: 2; text-align: center; ) .slider-nav a.current ( border-color: #000; color: #000; font-weight: bold; )

Тези класове ще бъдат присвоявани динамично от скрипта.

Този подход е подходящ за ефекта на плъзгане. Ако искаме да постигнем ефекта на избледняване, трябва да променим стиловете, тъй като float добавя хоризонтална подложка между слайдовете. Тоест, нямаме нужда от слайдове на един ред - имаме нужда от „пакет“ от слайдове:

Плъзгач (ширина: 1024px; поле: 2em автоматично; ) .slider-wrapper (ширина: 100%; височина: 683px; позиция: относителна; /* Създава контекст за абсолютно позициониране */) .slide (позиция: абсолютна; /* Абсолютно позициониране на всички слайдове */ ширина: 100%; височина: 100%; непрозрачност: 0; /* Всички слайдове са скрити */ преход: непрозрачност 500ms линеен; ) /* Първоначално се вижда само първият */ .slider- обвивка >
Използваме свойството opacity, за да скрием слайдовете, защото екранните четци ще пропуснат съдържанието на елементи, които имат display: none (вижте CSS в действие: Невидимо съдържание само за потребители на екранни четци).

Благодарение на CSS контекстното позициониране, ние създадохме „стек“ от слайдове, като последният слайд в източника е пред останалите. Но това не е това, от което се нуждаем. За да запазим реда на слайдовете, трябва да скрием всички слайдове с изключение на първия.

JS използва CSS преход, променя стойността на свойството opacity на текущия слайд и нулира тази стойност за всички останали.

JavaScript код Слайдшоу без пагиниране Слайдшоу без пагиниране работи, като щракнете върху бутоните „Напред“ и „Предишен“. Те могат да се разглеждат като оператори за увеличаване и намаляване. Винаги има показалец (или курсор), който ще се увеличава или намалява при всяко натискане на бутоните. Първоначалната му стойност е 0, а целта е да се избере текущият слайд по същия начин, по който се избират елементите на масива.

Така че, когато щракнете върху Напред първия път, показалецът се увеличава с 1 и получаваме втори слайд. Щраквайки върху Предишен, намаляваме показалеца и получаваме първия слайд. и т.н.

Заедно с показалеца използваме метода .eq() на jQuery, за да получим текущия слайд. В чист JS изглежда така:

Функция Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.slides = this.el.querySelectorAll(".slide") ; //...), _slideTo: функция (показател) ( var currentSlide = this.slides; //... ));

Запомнете - NodeList използва индекси точно като масив. Друг начин за избор на текущия слайд е с CSS3 селектори:

Slideshow.prototype = ( init: function() ( //...), _slideTo: function(pointer) ( var n = pointer + 1; var currentSlide = this.el.querySelector(".slide:nth-child(" + n + ")"); //... ) );

Селекторът CSS3:nth-child() брои елементи, започвайки от 1, така че трябва да добавите 1 към показалеца. След като изберете слайд, неговият родителски контейнер трябва да се премести отдясно наляво. В jQuery можете да използвате метода .animate():

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", слайдове: ".slide", //... скорост: 500, облекчаване : "linear" ), опции); var slideTo = function(slide, element) ( var $currentSlide = $(options.slides, element).eq(slide); $(options.wrapper, element). animate(( ляв : - $currentSlide.position().left ), options.speed, options.easing); ); //... ); ))(jQuery);

В обикновения JS няма метод .animate(), затова използваме CSS преходи:

Slider-wrapper (позиция: относителна; // необходим преход: ляво 500ms линеен;)

Сега можете да промените лявото свойство динамично чрез стиловия обект:

Функция Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector(".slider-wrapper "); this.slides = this.el.querySelectorAll(".slide"); //... ), _slideTo: функция (показател) ( var currentSlide = this.slides; this.wrapper.style.left = "- " + currentSlide.offsetLeft + "px"; ) );

Сега трябва да създадем събитие за кликване за всяка контрола. В jQuery можете да използвате метода .on(), а в чистия JS можете да използвате метода addEventListener().

Трябва също така да проверите дали показалецът е достигнал границите на списъка - 0 за „Назад“ и общия брой слайдове за „Следващ“. Във всеки случай трябва да скриете съответния бутон:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", слайдове: ".slide", предишен: ".slider-previous", следващ : ".slider-next", //... скорост: 500, облекчаване: "linear" ), опции); var slideTo = функция(слайд, елемент) ( var $currentSlide = $(options.slides, елемент). eq(slide); $(options.wrapper, element).animate(( left: - $currentSlide.position().left), options.speed, options.easing); ); return this.each(function() ( var $element = $(this), $previous = $(options.previous, $element), $next = $(options.next, $element), index = 0, total = $(options.slides).length; $next.on("click", function() ( index++; $previous.show(); if(index == total - 1) ( index = total - 1; $next.hide(); ) slideTo(index, $element); )); $previous.on("click", function() ( index--; $next.show(); if(index == 0) ( index = 0; $previous.hide(); ) slideTo(index, $element); )); )); ); ))(jQuery);

И в чист JS изглежда така:

Функция Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector(".slider-wrapper "); this.slides = this.el.querySelectorAll(".slide"); this.previous = this.el.querySelector(".slider-previous"); this.next = this.el.querySelector(".slider -следващ"); this.index = 0; this.total = this.slides.length; this.actions(); ), _slideTo: функция (показател) ( var currentSlide = this.slides; this.wrapper.style.left = "-" + currentSlide.offsetLeft + "px"; ), действия: function() ( var self = this; self.next.addEventListener("click", function() ( self.index++; self.previous.style. display = "block"; if(self.index == self.total - 1) ( self.index = self.total - 1; self.next.style.display = "none"; ) self._slideTo(self.index ); ), false); self.previous.addEventListener("click", function() ( self.index--; self.next.style.display = "block"; if(self.index == 0) ( self .index = 0;self.previous.style.display = "няма"; ) self._slideTo(self.index); ), невярно); ) );

Странирано слайдшоу В този тип слайдшоу всяка връзка отговаря за един слайд, така че няма нужда от индекс. Анимациите не се променят, а начинът, по който потребителят се движи през слайдовете, го прави. За jQuery ще имаме следния код:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", слайдове: ".slide", nav: ".slider-nav", скорост : 500, облекчаване: "линеен" ), опции); var slideTo = function(slide, element) ( var $currentSlide = $(options.slides, element).eq(slide); $(options.wrapper, element). animate(( left: - $currentSlide.position().left), options.speed, options.easing); return this.each(function() ( var $element = $(this), $navigationLinks = $( "a", options.nav); $navigationLinks.on("click", function(e) ( e.preventDefault(); var $a = $(this), $slide = $($a.attr("href) ")); slideTo($slide, $element); $a.addClass("current").siblings(). removeClass("current"); )); )); ))(jQuery);

В този случай всяка котва съответства на идентификатора на конкретен слайд. В чист JS можете да използвате както него, така и атрибута data, който съхранява цифровия индекс на слайдовете в NodeList:

Функция Slider(element) ( this.el = document.querySelector(element); this.init(); ) Slider.prototype = ( init: function() ( this.links = this.el.querySelectorAll("#slider-nav a"); this.wrapper = this.el.querySelector("#slider-wrapper"); this.navigate(); ), navigate: function() ( for (var i = 0; i< this.links.length; ++i) { var link = this.links[i]; this.slide(link); } }, slide: function(element) { var self = this; element.addEventListener("click", function(e) { e.preventDefault(); var a = this; self.setCurrentLink(a); var index = parseInt(a.getAttribute("data-slide"), 10) + 1; var currentSlide = self.el.querySelector(".slide:nth-child(" + index + ")"); self.wrapper.style.left = "-" + currentSlide.offsetLeft + "px"; }, false); }, setCurrentLink: function(link) { var parent = link.parentNode; var a = parent.querySelectorAll("a"); link.className = "current"; for (var j = 0; j < a.length; ++j) { var cur = a[j]; if (cur !== link) { cur.className = ""; } } } };

От IE10 можете да управлявате класове чрез classList:

Link.classList.add("текущ");

А с IE11 атрибутите на данните могат да бъдат получени чрез свойството набор от данни:

Var index = parseInt(a.dataset.slide, 10) + 1;

Странирани слайдшоута с контроли Тези слайдшоута представляват известна сложност за кода - трябва да комбинирате използването на хешове на индекси и страници. Тоест, текущият слайд трябва да бъде избран както на базата на позицията на показалеца, така и на слайда, избран чрез връзки.

Това може да се синхронизира чрез числовия индекс на всяка връзка в DOM. Една връзка - един слайд, така че техните индекси ще бъдат 0, 1, 2 и т.н.

В jQuery кодът ще бъде така:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( //... пагинация: ".slider-pagination", //...), опции); $. fn.slideshow.index = 0; return this.each(function() ( var $element = $(this), //... $pagination = $(options.pagination, $element), $paginationLinks = $(" a", $pagination), //... $paginationLinks.on("click", function(e) ( e.preventDefault(); var $a = $(this), elemIndex = $a.index(); // DOM цифров индекс $.fn.slideshow.index = elemIndex; if($.fn.slideshow.index > 0) ( $previous.show(); ) else ( $previous.hide(); ) if($. fn.slideshow.index == общо - 1) ( $.fn.slideshow.index = общо - 1; $next.hide(); ) else ( $next.show(); ) slideTo($.fn.slideshow. индекс, $element); $a.addClass("текущ"). siblings().removeClass("текущ"); )); )); ); //... ))(jQuery);

Веднага можете да видите, че видимостта на курсора се е променила - индексът вече е деклариран като свойство на обекта за слайдшоу. По този начин избягваме проблеми с обхвата, които могат да бъдат създадени от обратни извиквания в jQuery. Курсорът вече е достъпен навсякъде, дори извън пространството на имената на приставката, тъй като е деклариран като публично свойство на обекта на слайдшоуто.

Методът .index() дава цифровия индекс на всяка връзка.

Няма такъв метод в чист JS, така че е по-лесно да използвате атрибути на данни:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector( ".slider-wrapper"); this.slides = this.el.querySelectorAll(".slide"); this.previous = this.el.querySelector(".slider-previous"); this.next = this.el. querySelector(".slider-next"); this.navigationLinks = this.el.querySelectorAll(".slider-pagination a"); this.index = 0; this.total = this.slides.length; this.setup() ; this.actions(); ), //... настройка: функция() ( var self = this; //... for(var k = 0; k< self.navigationLinks.length; ++k) { var pagLink = self.navigationLinks[k]; pagLink.setAttribute("data-index", k); // Или pagLink.dataset.index = k; } }, //... }; })();

Сега можем да свържем нашите процедури с препратки и да използваме атрибутите на данните, които току-що създадохме:

Действия: function() ( var self = this; //... for(var i = 0; i< self.navigationLinks.length; ++i) { var a = self.navigationLinks[i]; a.addEventListener("click", function(e) { e.preventDefault(); var n = parseInt(this.getAttribute("data-index"), 10); // Или var n = parseInt(this.dataset.index, 10); self.index = n; if(self.index == 0) { self.index = 0; self.previous.style.display = "none"; } if(self.index >0) ( self.previous.style.display = "block"; ) if(self.index == self.total - 1) ( self.index = self.total - 1; self.next.style.display = "none "; ) else ( self.next.style.display = "block"; ) self._slideTo(self.index); self._highlightCurrentLink(this); ), невярно); ) )

Разбиране на размерите Нека се върнем към следното CSS правило:

Slider-wrapper (ширина: 9999px; височина: 683px; позиция: относителна; преход: ляво 500ms линеен;)

Ако имаме много слайдове, тогава 9999 може да не са достатъчни. Трябва да коригирате размерите на слайдовете в движение въз основа на ширината на всеки слайд и броя на слайдовете.

В jQuery е просто:

// Слайдшоу с пълна ширина връща this.each(function() ( var $element = $(this), total = $(options.slides).length; //... $(options.slides, $element ).width ($(window).width()); $(options.wrapper, $element).width($(window).width() * total); //... ));

Вземете ширината на прозореца и задайте ширината на всеки слайд. Общата ширина на вътрешната обвивка се получава чрез умножаване на ширината на прозореца и броя на слайдовете.

// Слайдшоу с фиксирана ширина return this.each(function() ( var $element = $(this), total = $(options.slides).length; //... $(options.wrapper, $element) .width ($(options.slides).eq(0).width() * общо); //... ));

Тук първоначалната ширина е зададена на ширината на всеки слайд. Просто трябва да зададете общата ширина на обвивката.

Вътрешният контейнер вече е достатъчно широк. В чист JS това се прави приблизително по същия начин:

// Слайдшоу с пълна ширина Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector(".slider-wrapper"); this.slides = this.el.querySelectorAll(".slide "); //... this.total = this.slides.length; this.setDimensions(); this.actions(); ), setDimensions: function() ( var self = this; // Viewport"s width var winWidth = window .innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var wrapperWidth = winWidth * self.total; for(var i = 0; i< self.total; ++i) { var slide = self.slides[i]; slide.style.width = winWidth + "px"; } self.wrapper.style.width = wrapperWidth + "px"; }, //... }; // Слайд-шоу фиксированной ширины Slideshow.prototype = { init: function() { this.wrapper = this.el.querySelector(".slider-wrapper"); this.slides = this.el.querySelectorAll(".slide"); //... this.total = this.slides.length; this.setDimensions(); this.actions(); }, setDimensions: function() { var self = this; var slideWidth = self.slides.offsetWidth; // Single slide"s width var wrapperWidth = slideWidth * self.total; self.wrapper.style.width = wrapperWidth + "px"; }, //... };

Ефекти на избледняване Ефектите на избледняване често се използват в слайдшоута. Текущият слайд изчезва и се появява следващият. jQuery има методи fadeIn() и fadeOut(), които работят както със свойствата на opacity, така и с display, така че елементът се премахва от страницата, когато анимацията завърши (display:none).

В чист JS е най-добре да работите със свойството opacity и да използвате стека за позициониране на CSS. Тогава първоначално слайдът ще бъде видим (непрозрачност: 1), а останалите ще бъдат скрити (непрозрачност: 0).

Следният набор от стилове демонстрира този метод:

Плъзгач (ширина: 100%; преливане: скрито; позиция: относителна; височина: 400px;) .slider-wrapper (ширина: 100%; височина: 100%; позиция: относителна;) .slide (позиция: абсолютна; ширина: 100 %; височина: 100%; непрозрачност: 0; ) .slider-wrapper > .slide:first-child (непрозрачност: 1; )

В чист JS трябва да регистрирате CSS прехода на всеки слайд:

Плъзгане (плаващо: ляво; позиция: абсолютно; ширина: 100%; височина: 100%; непрозрачност: 0; преход: непрозрачност 500ms линейно; )

С jQuery, за да използвате методите fadeIn() и fadeOut(), трябва да промените непрозрачността и дисплея:

Плъзгане ( float: ляво; позиция: абсолютна; ширина: 100%; височина: 100%; дисплей: няма; ) .slider-wrapper > .slide:first-child ( display: block; )

В jQuery кодът е както следва:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( обвивка: ".slider-wrapper", предишен: ".slider-предишен", следващ: ".slider-next" , слайдове: ".slide", nav: ".slider-nav", скорост: 500, облекчаване: "linear" ), опции); var slideTo = функция (слайд, елемент) ( var $currentSlide = $(options.slides , element).eq(slide); $currentSlide. animate((opacity: 1), options.speed, options.easing). siblings(options.slides). css("opacity", 0); ); //. .. ); ))(jQuery);

Когато анимирате непрозрачност, трябва също да промените стойностите на това свойство за останалите слайдове.

В JavaScript би било:

Slideshow.prototype = ( //... _slideTo: function(slide) ( var currentSlide = this.slides; currentSlide.style.opacity = 1; for(var i = 0; i< this.slides.length; i++) { var slide = this.slides[i]; if(slide !== currentSlide) { slide.style.opacity = 0; } } }, //... };

Медийни елементи: Видео Можем да включим видео в слайдшоу. Ето пример за видео слайдшоу от Vimeo:

Видеоклиповете се включват чрез iframe. Това е същият сменяем вграден блок като на снимката. Заменяем – защото съдържанието е взето от външен източник.

За да създадете слайдшоу на цяла страница, трябва да промените стиловете, както следва:

Html, тяло ( margin: 0; padding: 0; height: 100%; min-height: 100%; /* Height трябва да бъде цялата страница */) .slider ( width: 100%; overflow: hidden; height: 100 %; мин. височина: 100%; /* Височина и ширина до пълна */ позиция: абсолютна; /* Абсолютно позициониране */ ) .slider-wrapper ( ширина: 100%; височина: 100%; /* Височина и ширина до пълен */ позиция: относителна; ) .slide ( float: ляво; позиция: абсолютна; ширина: 100%; височина: 100%; ) .slide iframe ( дисплей: блок; /* Блоков елемент */ позиция: абсолютна; /* Абсолютно позициониране */ ширина: 100%; височина: 100%; /* Пълна височина и ширина */ )

Автоматични слайдшоута Автоматичните слайдшоута използват таймери. Всеки път, когато функцията на таймера setInterval() бъде извикана обратно, курсорът ще се увеличава с 1 и по този начин ще бъде избран следващият слайд.

Когато курсорът достигне максималния брой слайдове, той трябва да бъде нулиран.

Безкрайните слайдшоута бързо стават скучни за потребителите. Най-добрата практика е да спрете анимацията, когато потребителят задържи курсора на мишката върху нея и да възобновите, когато курсорът се отдалечи.

(function($) ( $.fn.slideshow = function(options) ( options = $.extend(( slides: ".slide", speed: 3000, easing: "linear"), options); var timer = null; // Таймер var index = 0; // Курсор var slideTo = function(slide, element) ( var $currentSlide = $(options.slides, element).eq(slide); $currentSlide.stop(true, true). animate (( opacity: 1), options.speed, options.easing). siblings(options.slides). css("opacity", 0); ); var autoSlide = function(element) ( // Инициализиране на таймера за последователност = setInterval ( function() ( index++; // Увеличаване на курсора с 1 if(index == $(options.slides, element).length) ( index = 0; // Нулиране на курсора) slideTo(index, element); ), options.speed); // Същият интервал като в method.animate()); var startStop = function(element) ( element.hover(function() ( // Спиране на анимацията clearInterval(timer); timer = null; ), function () ( autoSlide(element); // Възобновяване на анимацията )); ); return this.each(function() ( var $element = $(this); autoSlide($element); startStop($element); )); ); ))(jQuery);

И двата параметъра на метода .stop() са зададени на true, защото не е необходимо да създаваме опашка за анимация от нашата последователност.

В чист JS кодът става по-опростен. Регистрираме CSS преход за всеки слайд с определена продължителност:

Слайд (преход: непрозрачност 3s линеен; /* 3 секунди = 3000 милисекунди */)

И кодът ще бъде така:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.slides = this.el.querySelectorAll( ".slide"); this.index = 0; // Курсор this.timer = null; // Таймер this.action(); this.stopStart(); ), _slideTo: функция (слайд) ( var currentSlide = this. слайдове; currentSlide.style.opacity = 1; for(var i = 0; i< this.slides.length; i++) { var slide = this.slides[i]; if(slide !== currentSlide) { slide.style.opacity = 0; } } }, action: function() { var self = this; // Initializes the sequence self.timer = setInterval(function() { self.index++; // Увеличим курсор на 1 if(self.index == self.slides.length) { self.index = 0; // Обнулим курсор } self._slideTo(self.index); }, 3000); // Тот же интервал, что и у перехода CSS }, stopStart: function() { var self = this; // Останавливаем анимацию self.el.addEventListener("mouseover", function() { clearInterval(self.timer); self.timer = null; }, false); // Возобновляем анимацию self.el.addEventListener("mouseout", function() { self.action(); }, false); } }; })();

Навигация с клавиатура Разширените слайдшоута предлагат навигация с клавиатура, т.е. Превъртете през слайдовете, като натискате клавишите. За нас това просто означава, че трябва да регистрираме обработката на събитието за натискане на клавиш.

За да направим това, ще имаме достъп до свойството keyCode на обекта на събитието. Връща кода на натиснатия клавиш (списък с кодове).

Тези събития, които прикачихме към бутоните „Назад“ и „Напред“, сега могат да бъдат прикачени към клавишите „ляво“ и „десно“. jQuery:

$("body").on("keydown", function(e) ( var code = e.keyCode; if(code == 39) ( // Лява стрелка $next.trigger("click"); ) if( код == 37) ( // Стрелка надясно $previous.trigger("click"); ) ));

В чист JS, вместо простия метод .trigger(), ще трябва да използвате dispatchEvent():

Document.body.addEventListener("keydown", function(e) ( var code = e.keyCode; var evt = new MouseEvent("click"); // щракване с мишката if(code == 39) ( // Лява стрелка self .next.dispatchEvent(evt); ) if(code == 37) ( // Дясна стрелка self.previous.dispatchEvent(evt); ) ), false);

В приличните проекти не е обичайно да се прави това. Ще трябва да дефинираме функционалността, която осигурява обръщане в публичен метод, и след това да го извикаме, когато се щракне върху бутона. След това, ако друга част от програмата трябва да приложи тази функционалност, няма да има нужда да емулира DOM събития, а може просто да извика този метод.

Обратни извиквания Би било хубаво да можете да прикачите някакъв код към всяко действие на слайдшоу, което ще се изпълни, когато това действие се извърши. Това е целта на функциите за обратно извикване - те се изпълняват само когато се случи определено действие. Да приемем, че нашето слайдшоу има надписи и те са скрити по подразбиране. По време на анимацията трябва да покажем надпис за текущия слайд или дори да направим нещо с него.

В jQuery можете да създадете обратно извикване като това:

(функция($) ( $.fn.slideshow = функция(опции) ( опции = $.extend(( //... обратно извикване: функция() () ), опции); var slideTo = функция(слайд, елемент) ( var $currentSlide = $(options.slides, element).eq(slide); $currentSlide. animate(( opacity: 1), options.speed, options.easing, // Обратно извикване за текущия слайд options.callback($ currentSlide)). siblings(options.slides). css("opacity", 0); ); //... ); ))(jQuery);

В този случай обратното извикване е функция от .animate(), която приема текущия слайд като аргумент. Ето как можете да го използвате:

$(function() ( $("#main-slider").slideshow(( callback: function(slide) ( var $wrapper = slide.parent(); // Показва текущия надпис и скрива останалите $wrapper.find (" .slide-caption").hide(); slide.find(".slide-caption").show("slow"); ) )); ));

В чист JS:

(function() ( function Slideshow(element, callback) ( this.callback = callback || function()); // Нашето обратно извикване this.el = document.querySelector(element); this.init(); ) Слайдшоу. прототип = ( init: function() ( //... this.slides = this.el.querySelectorAll(".slide"); //... //...), _slideTo: function(slide) ( var self = това; var currentSlide = self.slides; currentSlide.style.opacity = 1; for(var i = 0; i< self.slides.length; i++) { var slide = self.slides[i]; if(slide !== currentSlide) { slide.style.opacity = 0; } } setTimeout(self.callback(currentSlide), 500); // Вызывает функцию по окончанию перехода } }; // })();

Функцията за обратно извикване е дефинирана като втори параметър на конструктора. Можете да го използвате по следния начин:

Document.addEventListener("DOMContentLoaded", function() ( var slider = new Slideshow("#main-slider", function(slide) ( var wrapper = slide.parentNode; // Показва текущия надпис и скрива останалите var allSlides = обвивка. querySelectorAll(".slide"); var caption = slide.querySelector(".slide-caption"); caption.classList.add("visible"); for(var i = 0; i< allSlides.length; ++i) { var sld = allSlides[i]; var cpt = sld.querySelector(".slide-caption"); if(sld !== slide) { cpt.classList.remove("visible"); } } }); });

Външни API Досега нашият работен сценарий е прост: всички слайдове вече са в документа. Ако трябва да вмъкнем данни в него отвън (YouTube, Vimeo, Flickr), трябва да попълваме слайдовете в движение, докато получаваме външно съдържание.

Тъй като отговорът от сървъра на трета страна може да не е незабавен, трябва да вмъкнете анимация за зареждане, за да покажете, че процесът е в ход:

Предишен Следващ

Може да бъде gif или чиста CSS анимация:

#spinner ( border-radius: 50%; border: 2px solid #000; height: 80px; width: 80px; position: absolute; top: 50%; left: 50%; margin: -40px 0 0 -40px; ) # spinner:after (съдържание: ""; позиция: абсолютна; цвят на фона: #000; горе:2px; ляво: 48%; височина: 38px; ширина: 2px; радиус на границата: 5px; -webkit-transform-origin: 50% 97%; transform-origin: 50% 97%; -webkit-animation: angular 1s linear infinite; animation: angular 1s linear infinite; ) @-webkit-keyframes angular ( 0%(-webkit-transform:rotate(0deg) );) 100%(-webkit-transform:rotate(360deg);) ) @keyframes angular ( 0%(transform:rotate(0deg);) 100%(transform:rotate(360deg);) ) #spinner:before ( съдържание: ""; позиция: абсолютна; цвят на фона: #000; горе: 6px; ляво: 48%; височина: 35px; ширина: 2px; радиус на границата: 5px; -webkit-transform-origin: 50% 94% ; transform-origin: 50% 94%; -webkit-animation: ptangular 6s linear infinite; анимация: ptangular 6s linear infinite; ) @-webkit-keyframes ptangular ( 0%(-webkit-transform:rotate(0deg);) 100 %(-webkit-transform:rotate(360deg);) ) @keyframes ptangular ( 0%(transform:rotate(0deg);) 100%(transform:rotate(360deg);) )

Стъпките ще бъдат така:
- изискване на данни отвън
- скриване на буутлоудъра
- анализира данни
- изграждане на HTML
- показване на слайдшоу
- процес на слайдшоута

Да речем, че избираме най-новите видеоклипове на даден потребител от YouTube. jQuery:

(function($) ( $.fn.slideshow = function(options) ( options = $.extend(( wrapper: ".slider-wrapper", //... loader: "#spinner", //... ограничение: 5, потребителско име: "learncodeacademy" ), опции); //... var getVideos = function() ( // Вземете видеоклипове от YouTube var ytURL = "https://gdata.youtube.com/feeds/api/ videos?alt=json&author=" + options.username + "&max-results=" + options.limit; $.getJSON(ytURL, function(videos) ( // Вземете видеоклипа като JSON обект $(options.loader). hide(); // Скриване на зареждащия модул var entries = videos.feed.entry; var html = ""; for(var i = 0; i< entries.length; ++i) { // Разбираем данные и строим строку HTML var entry = entries[i]; var idURL = entry.id.$t; var idVideo = idURL.replace("http://gdata.youtube.com/feeds/api/videos/", ""); var ytEmbedURL = "https://www.youtube.com/embed/" + idVideo + "?rel=0&showinfo=0&controls=0"; html += ""; html += ""; html += ""; } $(options.wrapper).html(html); // Выведем слайд-шоу }); }; return this.each(function() { //... getVideos(); // Обрабатываем слайд-шоу }); }; })(jQuery);

В чистия JavaScript има допълнителна стъпка - създаване на метод за получаване на JSON:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector( ".slider-wrapper"); this.loader = this.el.querySelector("#spinner"); //... this.limit = 5; this.username = "learncodeacademy"; ), _getJSON: функция (url , обратно извикване) ( обратно извикване = обратно извикване || функция() (); var заявка = нов XMLHttpRequest(); request.open("GET", url, true); request.send(null); request.onreadystatechange = function() ( if (request.status == 200 && request.readyState == 4) ( var data = JSON.parse(request.responseText); // Обратно извикване на JSON обект (данни); ) else ( console.log(request.status) ; ) ); ), //... ); ))();

Тогава процедурите са подобни:

(function() ( function Slideshow(element) ( this.el = document.querySelector(element); this.init(); ) Slideshow.prototype = ( init: function() ( this.wrapper = this.el.querySelector( ".slider-wrapper"); this.loader = this.el.querySelector("#spinner"); //... this.limit = 5; this.username = "learncodeacademy"; this.actions(); ) , _getJSON: функция(url, обратно извикване) ( обратно извикване = обратно извикване || функция(); var заявка = нов XMLHttpRequest(); request.open("GET", url, true); request.send(null); заявка .onreadystatechange = функция() ( if (request.status == 200 && request.readyState == 4) ( var data = JSON.parse(request.responseText); // Обратно извикване на JSON обект (данни); ) else ( console. log( request.status); ) ); ), //... getVideos: function() ( var self = this; // Вземете видео от YouTube var ytURL = "https://gdata.youtube.com/feeds/api /videos ?alt=json&author=" + self.username + "&max-results=" + self.limit; self._getJSON(ytURL, function(videos) ( // Вземете видеото като JSON обект var entries = videos.feed.entry ; var html = ""; self.loader.style.display = "няма"; // Скриване на товарача за (var i = 0; i< entries.length; ++i) { // Разбираем данные и строим строку HTML var entry = entries[i]; var idURL = entry.id.$t; var idVideo = idURL.replace("http://gdata.youtube.com/feeds/api/videos/", ""); var ytEmbedURL = "https://www.youtube.com/embed/" + idVideo + "?rel=0&showinfo=0&controls=0"; html += ""; html += ""; html += ""; } self.wrapper.innerHTML = html; // Выводим слайд-шоу }); }, actions: function() { var self = this; self.getVideos(); // Обрабатываем слайд-шоу } }; })(); Добавить метки

Понякога трябва да решавам проблеми, свързани с интерфейса, въпреки факта, че не го харесвам :)

В интерес на истината отношението ми към всичко свързано с „красиво“ можете да прецените от дизайна на този сайт, разработен лично от мен :)

Сравнително наскоро обаче се сблъсках с необходимостта да внедря плъзгач в JavaScript и това трябваше да стане без никакви готови библиотеки и дори без любимия на всички jQuery.

Тази необходимост беше причинена от факта, че резултатът трябваше да бъде JS скрипт, който ще бъде свързан към сайта чрез услуга на трета страна. Следователно вече не бяха необходими готови въртележки в JavaScript, защото За да ги интегрирате, беше необходимо да добавите връзка с библиотека към HTML кода на сайта чрез таг на скрипт и да копирате самите файлове или на сървъра, или да ги изтеглите чрез cdn, но това отново ще изисква редактиране на ресурсния код.

Как да направите JavaScript слайдер: началото

Днес смятам, че всеки, изпаднал в подобна ситуация, е започнал с търсене на съществуващи разработки, защото... когато задачата за създаване на JS въртележка е в обхвата на работа, тя винаги трябва да се извършва възможно най-бързо. И при такива условия никой няма да ви позволи да седнете и да изобретите собствените си велосипеди.

Клиентите винаги не се интересуват от това как е написан кодът, каква е неговата архитектура, основното е да видите резултата!

В резултат на това, както разбирате, преди да напиша слайдер в JavaScript без jQuery, реших да намеря готов и да го модифицирам, за да отговаря на моите нужди. Защо не jQuery? Да, защото на целевия ресурс, където планирах да свържа плъзгача си чрез услугата, извикването на jQuery в кода беше разположено по-късно от скрипта, свързан от услугата. Следователно конструкциите на jQuery в моя код просто не бяха възприети.

Като основа взех този плъзгач за изображения на JavaScript - https://codepen.io/gabrieleromanato/pen/pIfoD.

Реших да спра до тук, защото... неговият JS код е написан с помощта на OOP принципи и неговите класове са базирани на прототипи, а не на банални функции.

Честно казано, дълбоко не разбирам и не разпознавам сегашния шум около JavaScript, използващ ООП, рамки и други архитектурни неща на език, който първоначално е предназначен да бъде прост динамичен скриптов език. Точно като самия JS, аз откровено не го харесвам със синтактичния винегрет, който позволява същите конструкции да бъдат написани по няколко начина.

Но, за съжаление, в съвременния свят малко хора споделят моите позиции, защото... този език се развива с луда скорост и дори прави опити да спечели умовете на backend разработчиците, използващи Node.js като алтернатива на Java, PHP, C#, Ruby и други чудовища.

В резултат на това, за да не останете просто без работа, трябва тихо да разберете JavaScript. И в чистата реализация на плъзгач на JavaScript, която избрах, срещнах нещо, което, както разбирате, презирам в този език. Ето защо го избрах, за да има поне някаква причина да работя и разбирам JavaScript OOP и прототипните класове - иначе никога не бих ги докоснал доброволно в живота си :)

Въз основа на кода, който намерих, трябваше да разработя плъзгач в чист JS в изскачащ прозорец (това нещо се нарича още изскачащ прозорец, изскачащ прозорец и т.н.), който ще има бутони за превключване на слайдове и индикатори за кликване на текущия пързалка. Трябваше да се направи и бутон за затваряне на този прозорец.

Ето това завърших.

Създаване на слайдер JS библиотека

Първо реших да внедря всичко разумно и да направя JavaScript плъзгач за сайта под формата на библиотека, свързана със сайта с един скрипт, в който ще се извикват компонентите на плъзгача, разделени на поддиректории. Реших да го нарека popupSlider.js в чест на първоначалната му цел.

Неговият код може да бъде намерен в GitHub на този адрес - https://github.com/Pashaster12/popupSlider.js

Структурата на библиотеката е както следва:

Папката слайдове е за изображения на слайдове. Controls съдържа снимки на JS карусел контроли (бутони за затваряне на плъзгача и превключване на слайдове). И в активите има статични елементи на JS слайдера: HTML маркиране и файл със CSS стилове.

Е, файлът popupSlider.js е сърцето на самата библиотека, в която се записват JavaScript действията на въртележката и се установява връзка с други файлове. Точно този ще го свържем в сайта, а той ще извика другите.

Реших да започна с HTML маркирането на нашия JS карусел с изображения, който в моя случай изглежда така:

Текст 1 Текст 2 Текст 3

За да проектирам плъзгача в JavaScript като изскачащ прозорец, използвах следните стилове:

#slider ( margin: auto; width: 600px !important; overflow: hidden; ) #slider-wrapper ( width: 9999px; height: 343px; позиция: относителна; преход: ляво 400ms линеен; ) .slide (float: ляво; ширина : 600px; позиция: относителна; overflow: скрит; ) .caption ( width: 600px; height: 110px; line-height: 1.5; font-size: 15px; font-weight: 300; text-align: center; color: # 000; display:table; ) .caption-container ( display: table-cell; vertical-align: middle; padding: 0 20px; ) #slider-nav (position: absolute; bottom: -36px; text-align: center; ляво: 50%; трансформация: translateX(-50%); ) #slider-nav a (ширина: 8px; височина: 8px; text-decoration: none; color: #000; display: inline-block; border-radius: 50%; поле: 0 5px; цвят на фона: #fafafa; ) #slider-nav a.current ( цвят на фона: #337ab7; ) .horizontal-controls ( позиция: абсолютна; дисплей: inline-block; ширина: 12px ; височина: 20px; горе: 50%; margin-top: -10px; ) #prev (фон: url(../controls/arrow_left_inactive.png); ляво: -40px; ) #prev:hover (фон: url(../controls/arrow_left_active.png); ) #next (фон: url(../controls/arrow_right_inactive.png); дясно: -40px; ) #next:hover ( фон : url(../controls/arrow_right_active.png); ) #cq-popup (ширина: 600px; z-индекс: 23; ляво: calc(50%); горе: calc(50%); позиция: фиксирана !важно ; фоново повторение: без повторение; фонова позиция: дясно; фонов цвят: #fff; семейство шрифтове: "Roboto", "Segoe UI", "Helvetica", "Georgia", "Calibri", "Verdana" ; transform: translate(-50%, -50%) scale(1); ) #cq-popup .header ( display: inline-block; font-size: 17px; font-weight: 500; ) #cq-popup > div (ширина: 500px; размер на шрифта: 22px; височина на реда: 36px;) #cq-popup-btclose (текст-декорация: няма; позиция: абсолютна; дясно: -40px; горе: 0; фон: url(. ./controls/btn_delete_inactive.png); височина: 16px; ширина: 16px; ) #cq-popup-btclose:hover ( фон: url(../controls/btn_delete_active.png); ) #cq-popup-bg ( позиция : фиксиран; отгоре: 0; ширина: 100%; височина: 100%; фон: rgba(51,51,51,0.8); z-индекс: 22; )

В резултат на прилагането на тези JS стилове, въртележката изглежда така:

Преместих както HTML маркирането, така и CSS стиловете в отделни файлове popupSlider.html и popupSlider.css, които се намират в директорията с активи на библиотеката с плъзгачи на JavaScript. Направих това нарочно, така че когато използват този код, потребителите могат лесно да коригират маркирането и дизайна, без да се бъркат в JS кода, където това, което трябва да бъде написано, трябва да бъде написано директно.

В допълнение, много хора все още обичат да минимизират JS, за да ускорят зареждането на сайта. Така че би било много трудно да персонализирате това решение при определените условия.

В резултат на това реших просто да включа готови файлове в основния файл на библиотеката popupSlider.js, който за моята задача прие следната форма:

Функция Slider(element) ( this.loadStatic(); this.el = document.querySelector(element); this.init(); ) Slider.prototype = ( init: function () ( this.links = this.el.querySelectorAll ("#slider-nav a"); this.wrapper = this.el.querySelector("#slider-wrapper"); this.nextBtn = this.el.querySelector("#next"); this.prevBtn = this. el.querySelector("#prev"); this.navigate(); ), навигация: функция () ( var self = this; for (var i = 0; i< this.links.length; ++i) { var link = this.links[i]; link.addEventListener("click", function (e) { self.slide(this); }); } self.prevBtn.style.display = "none"; self.nextBtn.addEventListener("click", function (e) { var currentSlideNumber = document.querySelector("#slider-nav a.current").getAttribute("data-slide"); var nextSlide = document.querySelector(""); nextSlide.click(); }, false); self.prevBtn.addEventListener("click", function (e) { var currentSlideNumber = document.querySelector("#slider-nav a.current").getAttribute("data-slide"); var prevSlide = document.querySelector(""); prevSlide.click(); }, false); self.close(); }, slide: function (element) { this.setCurrentLink(element); var index = parseInt(element.getAttribute("data-slide"), 10) + 1; var currentSlide = this.el.querySelector(".slide:nth-child(" + index + ")"); this.wrapper.style.left = "-" + currentSlide.offsetLeft + "px"; if (index < this.links.length) this.nextBtn.style.display = "block"; else if (index == this.links.length) this.nextBtn.style.display = "none"; if (index >1) this.prevBtn.style.display = "блок"; иначе ако (индекс == 1) this.prevBtn.style.display = "няма"; ), setCurrentLink: функция (връзка) ( var parent = link.parentNode; var a = parent.querySelectorAll("a"); link.className = "current"; this.currentElement = link; for (var j = 0; j< a.length; ++j) { var cur = a[j]; if (cur !== link) { cur.className = ""; } } }, loadStatic: function () { var self = this; var link = document.createElement("link"); link.rel = "stylesheet"; link.href = "assets/popupSlider.css"; document.head.appendChild(link); var sliderHTML = ""; var xhr = new XMLHttpRequest(); xhr.open("GET", "assets/popupSlider.html", false); xhr.send(); if (xhr.status != 200) { alert("Can not load the popupSlider.html. Got the error " + xhr.status + ": " + xhr.statusText); } else { sliderHTML = xhr.responseText; } var div = document.createElement("div"); div.innerHTML = sliderHTML; document.body.appendChild(div); }, close: function () { document.getElementById("cq-popup-btclose").onclick = function () { document.getElementById("cq-popup-bg").remove(); document.getElementById("cq-popup").remove(); } } };

Няколко коментара относно горния код. Съдържанието на файла popupSlider.js е един единствен клас JavaScript Slider, който, подобно на PHP, съдържа конструктор и методи на класа. Само в JS дефиницията на конструктор, за разлика от PHP, е задължителна.

Конструкторът се дефинира с помощта на следната конструкция:

Функция Slider(element) ( //код на конструктора)

Вътре в конструктора трябва да се уточнят действията, които ще бъдат извършени при създаване на обект от клас.

Самите методи на класа ще бъдат разположени вътре в прототипа и ще бъдат достъпни за всички екземпляри на този JavaScript клас. Прототипът на JS в моя случай е описан от следния дизайн:

Slider.prototype = ( // методи )

Те ще бъдат извикани извън тялото на класа, както следва:

Var slider = new Slider(); slider.class_method();

И вътре в самия код на класа е наличен следният метод:

This.class_method();

Основното нещо е да не забравяме, че в JavaScript стойността на това зависи от контекста на извикването, така че в телата на някои методи, в които е необходимо да се извикват методи и свойства на клас, има такава конструкция:

Var self = това; self.class_method(); //за достъп до метод, който е едно ниво по-високо от кода на описания метод

Изглежда, че говорих за всички нюанси на писане на код. Сега няколко думи за методите на нашия JavaScript клас, които съдържат описания на JS действията на въртележката на изображенията.

loadStatic()

Първият метод, извикан при създаване на екземпляр на клас в конструктора. Отговаря за добавянето на маркиране на слайдер и файл със стилове към HTML кода на страницата на уебсайта.

Първо, нов таг за връзка се създава в паметта с помощта на JavaScript функцията document.createElement() и му се присвояват стойностите на всички необходими атрибути, включително пътя до CSS файла със стиловете на плъзгача JS. И накрая, той се добавя към HTML страницата с помощта на метода appendChild() на JavaScript в края на главата, където трябва да бъдат стиловете.

След това правим същото за файла с HTML маркирането на нашия плъзгач в чист JavaScript. Тук има само малък нюанс: не можете просто да включите HTML файл в същия, както направихме с CSS файл. Има специални библиотеки за това, например, за да включите HTML в HTML, библиотеката от w3.org е отлична - https://www.w3schools.com/howto/howto_html_include.asp

Но тогава ще трябва или да бъде включен в самата библиотека с плъзгачи, или да поиска от потребителите да го инсталират сами. Но всичко това е неоптимално, защото... изисква много движения на тялото и забавя скоростта на зареждане на сайта поради допълнителни скриптове.

В крайна сметка реших да взема съдържанието на HTML файла в кода на JavaScript и да го заредя в нов div елемент, създаден в паметта, точно както направих по-рано, за да включа CSS файл в JavaScript. Генерираният елемент се включва в самия край на основната част на HTML кода на страницата на сайта.

Ако искате да вмъкнете div с маркиране на плъзгача не само в края на тялото, но в конкретен контейнер, можете да използвате следния код вместо това:

Var div = document.createElement("div"); div.innerHTML = sliderHTML; document.body.appendChild(div);

Въведете следното, като посочите желания идентификатор на целевия контейнер (в моя случай плъзгачът HTML JS ще бъде разположен в елемента с id popupSlider):

Var target = document.querySelector("#popupSlider"); target.innerHTML = sliderHTML;

Методът, който се извиква в конструктора след loadStatic(), е необходим за инициализиране на свойствата на класа, съответстващи на основните HTML елементи, до които ще имаме достъп в следния код.

Накрая се извиква методът navigate().

навигирам()
При този метод действията, които се случват, когато щракнете върху бутоните за превключване на плъзгачите и навигационните елементи, разположени под самия плъзгач, са обозначени под формата на кръгове.

За удобство преместих кода на JavaScript за промяна на слайдове в отделен метод slide(), но в този просто го прикачвам към събитието за кликване за всеки кръгъл бутон в цикъла.

Когато щракнете върху бутоните „предишен слайд“ / „следващ слайд“, както можете да видите, реших просто да емулирам щракване върху съответния кръг, определяйки желания спрямо текущия, който има текущ CSS клас.

слайд (елемент)

Методът, „отговорен за магията“ на самия JavaScript карусел, който съдържа кода, който променя позициите на слайдовете. В самото начало се извиква методът setCurrentLink(), за който ще говорим малко по-късно.

Обектът на бутона за навигация на плъзгача JS под формата на кръг му се предава като входен параметър.

Самият плъзгач работи по следния начин:

  • Всички наши слайдове са проектирани под формата на блокове с еднакъв размер, един след друг. Прозорецът на плъзгача е само видимата част от елемента, който съдържа всички слайдове.
  • Ние дефинираме отместването на левия край на текущия слайд спрямо левия край на родителския елемент, като използваме свойството offsetLeft.
  • И изместваме родителския елемент с тази стойност, така че необходимият елемент да се показва в прозореца на плъзгача.
  • В края на метода е описано поведението на бутоните “предишен слайд”/”следващ слайд”, оформени съответно като стрелки наляво/надясно. Ако текущият слайд е първият от целия списък, тогава бутонът за преминаване към предишния слайд е скрит. Ако е последното, премахнете бутона, за да преминете към следващия слайд.

    setCurrentLink(връзка)

    Този метод на нашия клас плъзгач на JavaScript е отговорен за подчертаването на кръглия бутон за навигация, съответстващ на текущия елемент. Тези. ако сме избрали втория слайд, вторият бутон ще бъде маркиран.

    Обектът на бутона, който трябва да бъде избран като текущ, се предава като входен параметър на функцията.

    Логиката за маркиране на текущия елемент е проста:

  • Получаваме обекта на родителския елемент, който в нашия случай е контейнерът с идентификатор slider-nav.
  • Получаваме всички елементи за навигация като масив от връзки.
  • Избираме елемента, получен като вход, като го добавяме към текущия клас.
  • В цикъл преминаваме през всички навигационни елементи и изчистваме стойността на класа за всички с изключение на текущия. Това е необходимо, за да премахнете избора на елемента, който е бил текущ преди извикването на тази функция.
  • Последният метод от класа, който определя действието при щракване върху бутона за затваряне на плъзгача под формата на кръст. Тук всъщност кодът е най-разбираемият от всички съдържащи се в JS slider class.

    Когато щракнете върху бутона за затваряне, достъпен чрез неговия идентификатор, елементът на плъзгача и елементът, който задава полупрозрачния фон, се премахват от страницата. Те също на свой ред се получават чрез уникални идентификатори.

    Самият метод се извиква вътре в описания по-горе navigate(), който съдържа всички сценарии на действия, извършващи се в нашия плъзгач на JavaScript.

    Между другото, ако искате да затворите плъзгача, когато щракнете извън него, просто добавете следния код към този метод:

    Document.getElementById("cq-popup-bg").onclick = функция () (document.getElementById("cq-popup-bg").remove(); document.getElementById("cq-popup").remove() ;

    JavaScript слайдшоу, базирано на разработената библиотека

    Понякога на практика може да се наложи да направите JS скролираща въртележка, която често се нарича слайдшоу. В моя случай това не беше задължително, но все пак реших да направя такъв въз основа на крайния код на библиотеката за случай, в който може да бъде полезен.

    Всъщност изпълнението на JavaScript на слайдшоу се различава доста малко от обикновения слайдер. Единствената разлика е, че при слайдшоу слайдовете се превключват автоматично през даден интервал от време, докато в случай на обикновен JS карусел те се сменят ръчно с помощта на навигационни елементи.

    Слайдшоу: функция (изчакване) ( var sliderCount = this.links.length; var self = this; this.slideCycle = setInterval(function () ( var currentSlideNumber = document.querySelector("#slider-nav a.current").getAttribute ("data-slide"); var slideId = parseInt(currentSlideNumber, 10) + 1; self.slide(document.querySelector("")); ), таймаут); )

    Мисля, че е ясно какво се случва тук. За да създам този метод, копирах кода от събитието за кликване на бутоните за ръчно плъзгане и го поставих в JavaScript извикване на функцията setInterval(), която изпълнява определеното действие след определен период от време.

    Скриптът за действие се предава като първи аргумент като анонимна функция, а интервалът от време се предава като втори, което реших да направя като променлива, чиято стойност се предава, когато се извиква slideShow().

    Единствената модификация на кода вътре в setInterval(), която беше необходима, беше да се определи броят на слайдовете и да се сравни индексът на текущия слайд с него, за да се извърши цикъл на автоматичното превключване.

    Е, за да работи този код, трябва да се извика самият метод. Реших да направя всичко това в същия navigate(), който е точно колекция от всякакви скриптове. Поставих извикването в самия край, като подадох като аргумент стойността на интервала от време за автоматична смяна на слайдове в нашето JS слайдшоу (избрах 2000 милисекунди или 2 секунди, можете да промените това число, ако е необходимо):

    self.slideShow(2000);

    След това проверете работата на плъзгача на JavaScript, като не забравяте да почистите браузъра си.

    На теория всичко трябва да работи. Ако не, проучете грешките в конзолата на браузъра и ги споделете в коментарите.

    В резултат на това получихме JS слайдшоу, в което слайдовете се сменят автоматично и в кръг, т.е. когато се достигне последният слайд, шоуто преминава в нов цикъл и шоуто започва отново от първия елемент.

    Когато работех с различни JS библиотеки за карусели и прегледи на изображения, забелязах, че разработчиците активно използват тази практика, но с някои добавки. Във всички решения, които съм виждал, автоматичното слайдшоу се прекъсва, ако потребителят направи ръчно превключване. Затова реших да направя същото в моята библиотека.

    За да прекъсна автоматичното показване на слайдове с въртележка на JavaScript, реших да използвам стандартната JS функция clearInterval(), на която подавам като аргумент идентификатора на времевия интервал, върнат от функцията setInterval(), когато е зададен.

    В резултат на това получих следния код, който реших да не пиша като отделен метод:

    ClearInterval(self.slideCycle);

    И го постави на места, където са описани действията при кликване върху различни навигационни елементи, т.е. в следното:

    Link.addEventListener("клик", функция (e) (...)); self.prevBtn.addEventListener("щракване", функция (e) (...)); self.nextBtn.addEventListener("щракване", функция (e) (...));

    По-добре е да извикате clearInterval() по-близо до самото кликване, основното е преди него, а не след него.

    Интегриране на JavaScript слайдер в сайта

    И така, нашият слайдер в чист JS е готов. Сега остава само да го свържете към сайта.

    За да направите това, трябва да изпълните следните стъпки последователно, които са стандартни действия при интегриране на всякакви JavaScript библиотеки на трети страни като цяло.

    Етап 1 . Ние копираме библиотечните файлове на нашия уебсайт в отделна директория.
    Стъпка 2. Добавете следния код към HTML на страниците, където ще трябва да се покаже плъзгачът, като го поставите преди затварящия етикет body:

    Стъпка 3. Поставяме следния код за извикване на JS въртележката във всеки съществуващ JavaScript файл, който е включен на страницата след свързване на самия плъзгач:

    Var aSlider = new Slider("#slider");

    Както можете да видите, този код по същество създава обект от класа Slider, който се съдържа в popupSlider.js. Ето защо той трябва да бъде извикан само след свързване на самия клас файл към страницата.

    Добавяне на нови слайдове към въртележка на JavaScript

    Тук всичко е много просто. Тъй като нашите слайдове се вземат от отделна директория на библиотеката със слайдове, когато добавяте нови снимки, просто ще трябва да хвърлите необходимите файлове в нея, като първо сте им дали същия размер като другите.

    И след това в кода на файла assets/popupSlider.html добавете нов блок към контейнера с id slider-wrapper:

    Текст

    По принцип можете просто да копирате подобен съществуващ и да промените пътя до файла с изображението и текста на подписа (ако изобщо е необходимо).

    Ще трябва да добавите и нов навигационен елемент под формата на кръг, защото... Към момента автоматичното му добавяне все още не е реализирано. За да направите това, ще трябва да добавите следния код към контейнера със slider-nav id, като го напишете в самия край:

    Стойността на атрибута data-slide трябва да е по-голяма от най-голямата стойност на другите елементи. Достатъчно е просто да увеличите максималния ток с единица.

    Опаковане на JS карусел в един скрипт

    Това е всичко, плъзгачът на JavaScript е готов и свързан. Аз лично препоръчвам да използвате тази опция на практика, ако изобщо имате нужда от нея :)

    Между другото, за да ускорите работата му, можете допълнително да компресирате статични компоненти: CSS, HTML и JavaScript файлове. Не направих това и не ви предложих минимизиран код, защото сега има много системи за изграждане на интерфейс: Gulp, Grunt, Webpack и други. И всеки от тях има свои собствени алгоритми за компресиране и свързване на файлове.

    В допълнение минимизираните резултати може да работят по различен начин в различните операционни системи. Като цяло причините са много.

    И самите изходни кодове, мисля, не са толкова тежки, че да се нуждаят от тази процедура. Но ако имате нужда от тях, тогава конфигурирайте минимизирането сами, като вземете предвид вашата операционна система и колектор.

    Както писах в самото начало, за да разреша първоначално поставената ми задача, трябваше да получа един JS файл за правилното използване на моя слайдер чрез услуга на трета страна на сайта. Поради тази причина аз, строго погледнато, не използвах готови библиотеки на трети страни.

    Тогава опцията за един скрипт на JavaScript carousel ще ви бъде полезна, защото... цялото съдържание ще се съдържа директно в него, включително HTML/CSS код, който в случай на библиотека се съхранява в отделни файлове.

    Сценарият в моя случай се състои от две части. Първата част съдържаше съдържанието на файла popupSlider.js, който няма да представям втори път. Вмъкнете го сами, като премахнете описанието на метода loadStatic() и неговото извикване от кода на класа, т.к. няма да ни трябват.

    Втората част от един скрипт на плъзгач на JavaScript за сайта е манипулатор за събитието DOMContentLoaded, което възниква, когато съдържанието на страницата се зареди.

    Там ще добавим JS кода на carousel към HTML/CSS страницата и ще създадем обект от класа Slider, което е еквивалентно на активирането на самия слайдер.

    Схематично кодът изглежда така:

    /* съдържание на popupSlider.js без описание на метода loadStatic() и неговото извикване */ document.addEventListener("DOMContentLoaded", function())( var str = "\ \ /*css код*/ \ /* html код * / "; var div = document.createElement("div"); div.innerHTML = str; document.body.appendChild(div); var aSlider = new Slider("#slider");

    Тъй като в моя случай опцията за качване на файлове на сървъра беше напълно затворена, трябваше да кача файловете с изображения на контролите на въртележката на JavaScript в облака и вместо пътищата до тях в HTML и CSS кода да напиша връзките, генерирани по време спестяване.

    Ако нямате такива затруднения, тогава не е нужно да променяте нищо, но не забравяйте да копирате директориите на библиотеката със слайдове и контроли на сървъра и да посочите правилните пътища към тях.

    Персонализиран JS слайдер - перспективи за развитие

    Честно казано, не смятам да се занимавам с целенасочена поддръжка и развитие на създаденото от мен решение :) В момента има куп подобни слайдери и малка количка, които за разлика от моята си имат собствена история, са щателно тествани и се поддържат от голяма общност от потребители и разработчици.

    Някак си не ми е интересно да започна цялото това пътуване от нулата сам и да създам друг мотоциклет, а и наистина нямам време за това. Но, от друга страна, този плъзгач на JavaScript е отлична възможност за практикуване на разработка чрез преработване на неговия код и внедряване на нови интересни функции, които може би все още не съществуват.

    Така че, ако и вие като мен се нуждаете от кодова база за експерименти и имате поне малко допълнително свободно време, копирайте кода на плъзгача на JavaScript, който описах, или се присъединете към сътрудниците в GitHub. Хранилището е отворено и дадох връзка към него в началото на статията.

    Ако искате да подобрите уменията си за преден край на моето творение, мога дори да ви дам малък списък с редакции и подобрения, от които се нуждае кодът и които може да са ви интересни по отношение на тяхното внедряване:

  • направете външна конфигурация, за да можете удобно да конфигурирате плъзгача;
  • направи възможно вграждането на плъзгач в страницата (в момента той е проектиран само като изскачащ прозорец);
  • асинхронно зареждане на HTML код (сега синхронно, което е маркирано като остаряло от много браузъри);
  • пакетирайте библиотеката като пакет, NPM, Bower или друг пакет, така че да може да се инсталира и зависимостите да се управляват с помощта на мениджъри на пакети;
  • направете оформлението адаптивно за използване на JS карусел на различни устройства;
  • направете превключване на слайдове въз основа на събитието Swipe за мобилни потребители.
  • Списъкът с редакции, които дадох, разбира се, не е окончателен и може да бъде допълван. Напишете вашите предложения, мисли и желания в коментарите под статията и споделете с приятелите си чрез социалните мрежи, за да ги включите и в разработката.

    Моля ви да не преценявате строго кода ми, защото, както вече казах, не се смятам за Frontend специалист и не съм. Също така съм отворен за всички ваши коментари относно стила на кодиране и се надявам, че мога да науча нещо от вас, а вие от мен, т.е. изпълнява основната цел за разработване и поддръжка на продукти с отворен код.

    Присъединете се към общностите на проекта, абонирайте се за актуализации и дори можете да ми помогнете финансово, като използвате формата точно под самата статия, ако съм успял да ви помогна с нещо или просто харесвате това, което правя :)

    Това е всичко, което исках да кажа! Всичко най-хубаво! 🙂

    P.S. : ако имате нужда от уеб сайт или трябва да направите промени във вече съществуващ, но нямате време или желание за това, мога да предложа услугите си.

    Повече от 5 години опит в професионалната разработка на уебсайтове. Работа с PHP, OpenCart, WordPress, Laravel, Yii, MySQL, PostgreSQL, JavaScript, React, Angular и други технологии за уеб разработка.

    Опит в разработването на проекти на различни нива: целеви страници, корпоративни уебсайтове, онлайн магазини, CRM, портали. Включително поддръжка и развитие на HighLoad проекти. Изпращайте кандидатурите си по имейл [имейл защитен].

    Здравейте всички!
    Разработчиците от всички ивици, когато създават следващия си уеб проект, често се интересуват от въпроса как да представят на своите потребители различни видове изображения, независимо дали са снимки или комплекти от снимки. За това любознателните умове на онлайн пространството, разбира се в по-голямата си част това е „буржоазно“ пространство, търсят все повече нови решения за създаване на ефектни, цветни и най-важното функционални слайдшоута и фото галерии. В по-голямата си част те се персонализират от разработчиците, за да отговарят на дизайна на шаблона на създавания уеб проект или под формата на плъгини и модули за конкретен двигател за управление на сайтове. Струва си да разгледате съвременните шаблони, защото нито една тема, с редки изключения, не може да мине без някакъв вид плъзгач за добавки или обикновен ротатор на изображения. Така че е разбираемо, че много уеб разработчици искат да имат нещо подобно в своя арсенал и да изненадат своите читатели максимално, като ефективно представят изображения на своите сайтове.

    Продължавайки продължаващата поредица от прегледи на възникващи нови решения при създаване, реших да събера по-пълна колекция от най-интересните и ефективни слайдшоута и фото галерии, които някога съм срещал, създадени с помощта на магията на jQuery.
    Бих искал веднага да ви предупредя, че ресурсите, обсъждани в рецензията, са предимно на английски, но мисля, че който има нужда от него, ще го разбере интуитивно или с помощта на преводачи, от които има стотинка. И ако търсите достатъчно усилено, можете да намерите описания на техниката за създаване на някои галерии и слайдери на руски език, тъй като много от нашите уеб разработчици превеждат, докато работят върху конкретен проект, първо за себе си, а след това публикуват подробни описания на всичките си манипулации за свободен достъп.
    Например, това направих, когато работех върху механизма за създаване, първо намерих опция за галерия, която беше подходяща за мен в burzhunet, преведох я за по-добро разбиране на това, което правя, и в бъдеще се оказа, надявам се, не лоша статия за използването на скрипта Highslide с примери за работа в различни варианти на приложение.
    И така, стига с ненужните текстове, нека преминем директно към прегледа, гледайте, четете кратки обяснения и избирайте от огромен брой нови jQuery плъгини и скриптове за внедряване на интересни плъзгачи за изображения, фото галерии, слайдшоу на вашите сайтове: с плъзгачи за автоматична и ръчна промяна, плъзгачи за фоново изображение, със и без миниатюри и др. и така нататък...

    Of.Site | Демонстрация

    Пълна, адаптивна jQuery галерия с изображения с елементи на слайдшоу, ефекти на преход и множество опции за албуми. Съвместим с всички съвременни настолни и мобилни браузъри.

    Урок за това как да създадете галерия на цял екран с помощта на jQuery. Идеята е миниатюра на представеното изображение на цял екран да се появи отстрани, с отражение, докато се движите през изображенията с помощта на стрелките или щракването на мишката. Големите изображения се движат нагоре или надолу в стил слайдшоу в зависимост от избрания от вас преход. Възможност за мащабиране на изображението, което прави изображението във фонов режим видимо в режим на цял екран или коригирано спрямо размера на страницата.

    Паралакс плъзгач

    Parallax Slider е интересно решение за организиране на показването на изображения под формата на слайдшоу с елементи за ръчно управление. Оригиналното разположение на миниатюрни картинки привлича вниманието. Официалният уебсайт има пълна разбивка на това как да интегрирате и конфигурирате плъзгача.

    Minimalistic Slideshow Gallery с jQuery е отлична галерия с изображения с елементи за автоматична смяна на картини, както и възможност за ръчно управление на дисплея и избор на изображения от падащ блок с мрежа от миниатюри. Един от недостатъците е липсата на преглед на изображения в пълен размер, но това е минимализмът на тази галерия.

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

    Minimit Gallery е jQuery плъгин с възможност за персонализиране с голям избор от преходи на изображения. С помощта на галерията Minimit можете да организирате показване на изображения под формата на въртележка, слайдшоу, обикновен ротатор и обикновен скролер на изображения.

    е малък (2kb) jQuery плъгин, който предоставя прост, безсмислен начин за показване на изображения като слайдшоу.

    е добре изглеждаща javascript галерия с интуитивни контроли и безпроблемна съвместимост на всички компютри, iPhone и мобилни устройства. Много лесен за инсталиране и конфигуриране

    За разлика от много плъзгачи за изображения на Javascript и jQuery, Slider.js е хибридно решение, захранвано от CSS3 преходи и анимации.

    Това е шаблон от една страница за създаване на различни презентации в HTML5 и CSS3.

    Слайдшоуто на Diapo е проект с отворен код. Ако искате, можете да предложите промени или подобрения. Можете да го изтеглите и използвате безплатно и нищо и никой не ви спира да използвате този слайдер във вашите проекти. Плъзгачът е лесен за персонализиране, има интересни преходи между представеното съдържание и можете да поставите всичко в плъзгача, работи доста бързо, без задръствания.

    не е нищо повече от друг инструмент за създаване на слайдшоута на уебсайтове и други уеб проекти. Поддържа всички съвременни браузъри, хоризонтални и вертикални анимации, поддръжка за персонализирани преходи, API за обратно извикване и много други. Можете да използвате всякакви HTML елементи във вашите слайдове, той е разбираем и достъпен за начинаещи и се разпространява напълно безплатно.

    Слайдшоу на JavaScript за гъвкаво развитие

    Внедрете своите слайдшоута с този страхотен плъгин jQuery. Силно адаптивен инструмент, за да можете да изградите своето представяне на съдържание според вашите изисквания. За да осигурите по-лесна интеграция с външни данни или данни от вашия CMS, . Това е нова версия и е написана от нулата. Разработчиците се опитаха да опишат целия процес на работа с тяхното въображение много ясно и разбираемо.

    е jQuery плъгин, който ви позволява да трансформирате неподредени списъци в слайдшоу с атрактивни анимационни ефекти. В слайдшоу можете да покажете списък със слайдове, като използвате номера или миниатюри, или като използвате бутоните Предишен и Следващ. Плъзгачът има много оригинални типове анимация, включително куб (с различни подтипове), тръба, блок и други.

    Пълен набор от инструменти за организиране на всякакъв вид презентации с различно съдържание във вашите уеб проекти. Буржоазните момчета се постараха, включиха почти всички видове различни слайдери и галерии, използващи магията на jQuery. Плъзгач за снимки, галерия от снимки, динамично слайдшоу, въртележка, плъзгач за съдържание, меню с раздели и много други, като цяло има място за развихряне на неудържимото ни въображение.

    Това е плъгин за слайдшоу на jQuery, който е създаден с оглед на простотата. Опакова се само най-полезният набор от функции, както за начинаещи, така и за напреднали разработчици, предоставящи възможност за създаване на прости, но в същото време много ефективни слайдшоута, които са удобни за потребителя.

    — прост слайдер, изграден на jQuery, прост във всички отношения, не изискващ специални умения, мисля, че мнозина ще го намерят за полезен за внедряване на слайдшоута на техните уебсайтове. Плъгинът е тестван във всички съвременни браузъри, включително бавния браузър IE.

    jbgallery е вид уиджет за потребителски интерфейс, написан на javascript на библиотеката jQuery. Функцията му е да показва едно голямо изображение като фон на сайта в режим на цял екран, няколко изображения под формата на слайдер. Всички режими на гледане имат контроли за гледане. Това е интересно решение по свой начин, а в някои случаи дори не е стандартно.

    Това е лесен за използване плъгин jQuery за показване на вашите снимки като слайдшоу с ефекти на преход между изображенията (виждали сте по-интересни). jqFancyTransitions е съвместим и обстойно тестван със Safari 2+, Internet Explorer 6+, Firefox 2+, Google Chrome 3+, Opera 9+.

    е свободно разпространявана jQuery добавка за преглед на изображения и друга информация във формата Lightbox. Изскачащ прозорец с контроли, сенчест фон и всичко това, просто и с вкус.

    Друг jQuery плъгин от серията Lightbox, въпреки че тежи безобразно малко (9 KB), но има много функционалност. Има прилично проектиран интерфейс, който винаги можете да подобрите или персонализирате с помощта на CSS.

    Още от името става ясно, че няма нищо фантастично, имаме много прост автоматичен скролер на изображението, с напълно липсващи контроли. Кой знае, може би този слайдер ще привлече вниманието ви именно с минимализма си.

    Ротатор на изображения с различни видове преходи. Работи както автоматично, така и чрез щракване и е доста лесен за настройка.

    — пълноценна галерия с изображения, а не само плъзгач. Преглед на миниатюри и възможност за избор на ефекти на преход, пълна поддръжка за всички браузъри, подробно описание на интеграция в уеб проект и безплатно разпространение.

    Това е реализация на готови за използване слайдшоута, използващи scriptaculous/прототип или jQuery. Horinaja е донякъде иновативно решение, защото ви позволява да използвате колело, за да превъртате през съдържанието, поставено в плъзгача. Когато показалецът на мишката е извън областта на слайдшоуто, превъртането става автоматично; когато показалецът е поставен върху слайдшоуто, превъртането спира.

    Това е функция от поредица прости скролери за изображения, макар и с контроли за преглед, и следователно работи както в автоматичен, така и в ръчен режим.

    s3Slider е jQuery плъгин, който създава слайдшоу от неподреден списък с изображения и може лесно да се внедри на всяка уеб платформа.

    Това е плъгин jQuery, който е оптимизиран за обработка на големи обеми снимки, като същевременно спестява честотна лента.

    Вегас фон

    Приставката Vegas Background jQuery ви позволява да добавяте красиви фонови изображения на цял екран към уеб страници, всички с елементи на слайдшоу. Ако внимателно проучите тънкостите на работата с приставката, можете да намерите много интересни решения, разбира се, само ако имате нужда от това.

    — плъзгач като плъзгач, нито повече, нито по-малко, с надписи за изображения или съобщения за статии и прости контроли, на случаен принцип.

    е лек (около 5 KB) javascript за организиране на преглед на изображения. Автоматичното преоразмеряване и мащабиране на големи изображения ви позволява да видите картината в пълен размер в прозореца на браузъра

    Версия 4 на PikaChoose jQuery Image Gallery е налична! Pikachoose е леко jQuery слайдшоу със страхотни функции! Интеграция с Fancybox, отлични теми (макар и не безплатни) и много повече се предлагат на вашето внимание от разработчиците на плъгини.

    Проверява броя на изображенията във вашата обява и динамично създава набор от връзки към снимки като цифрова навигация. В допълнение, щракването върху всяко изображение ще се премести напред или назад и можете също да превъртите през изображенията в зависимост от областта, върху която щракнете върху снимката (например: щракването върху лявата страна на картината ще премести слайдовете напред и назад, съответно за дясната страна на изображението).

    Друг слайдер на jQuery, който ще се впише идеално във всеки WordPress шаблон.

    Друга разработка на “Nivo”, като всичко, което правят момчетата от това студио, плъгинът е направен с високо качество, съдържа 16 уникални ефекта на преход, навигация от клавиатурата и много други. Тази версия включва специален плъгин директно за WordPress. Така че за всички фенове на тази машина за блогове, Nivo Slider ще бъде точно за вас.

    jQuery плъгин, който ви позволява бързо да създадете прост, ефективен и красив слайдер за изображения с всякакъв размер.

    Pirobox е лек jQuery скрипт за „лайтбокс“, гледането се извършва в изскачащ блок, който автоматично се настройва към размера на изображението, с всички контроли.

    Създателите на тази галерия предлагат доста оригинално представяне на снимките. Изображенията се показват в миниатюри под формата на вълна, когато щракнете върху миниатюрата, ще видим версия със среден размер на изображението, щракнете втори път и ще видите голямо изображение. Може да смятате това за експеримент, но трябва да признаете, че нещо ново и необичайно винаги е интересно.

    Слайдшоу на цял екран с HTML5 и jQuery

    За да създават слайдшоута и да показват снимки в режим на цял екран, разработчиците са използвали вече познатия плъгин Vegas jQuery, който съдържа много идеи и техники, описани по-рано подробно в статиите на групата. Наличието на HTML5 аудио елементи и стилът на преходи между изображенията са привлекателни.

    Още една разработка на екипа на Codrops, пълноценна и функционална галерия с изображения, но няма смисъл да я описваме, трябва да я видите.

    Слайдшоу с изображения, снимките изчезват точно пред очите ви, ефектът е просто прекрасен.

    Това е рамка за галерия с изображения на JavaScript, изградена върху библиотеката jQuery. Целта е да се опрости процеса на разработване на професионална галерия с изображения за уеб и мобилни устройства. Можете да го видите в изскачащ прозорец или в режим на цял екран.

    Ние тихо започваме да свикваме и чакаме нови творби от екипа на Codrops. Моля, вземете отличен плъзгач за изображение с великолепен 3D ефект на преход, за да преглеждате изображения в режим на цял екран.

    Друг плъгин за WordPress от серията организатори на слайдшоу. Лесно се интегрира в почти всеки дизайн и предлага много опции за персонализиране както за опитни потребители, така и за неопитни.

    Друг плъгин, написан за WordPress, ще улесни много организирането на слайдшоу от снимки или друго съдържание във вашите блогове.

    Добър плъгин за слайдшоу за интегриране в WordPress. Xili-floom-slideshow се инсталира автоматично и са разрешени и лични настройки.

    Slimbox2 е утвърден WordPress плъгин за показване на изображения с ефект на лайтбокс. Поддържа автоматично слайдшоу и преоразмеряване на изображения в прозореца на браузъра. И като цяло, този плъгин има много предимства пред другите плъгини от тази серия.

    Този плъгин/джаджа ви позволява да създавате динамични, контролирани слайдшоута и презентации за вашия уебсайт или блог, работещи на двигателя на WordPress.

    Този плъгин на WordPress трансформира вградени изображения от галерия в просто и гъвкаво слайдшоу. Плъгинът използва FlexSlider jQuery плъзгач за изображения и лични настройки на потребителя.

    е WordPress плъгин за организиране на слайдшоу от снимки, снимки от SmugMug, Flickr, MobileMe, Picasa или Photobucket RSS емисия, работи и се показва с чист Javascript.

    Прост плъзгач за WordPress и други. Нищо излишно или тромаво, работата е извършена в минималистичен стил, акцентът е върху стабилността и скоростта, идеално се свързва с двигателя за управление на блога.

    Според мен Skitter е един от най-добрите слайдери, които поддържат работа с WordPress. Привлечен съм от стабилността и скоростта на работа, не твърде изпъкналите контроли, ефектите на прехода и доста простата връзка с темата.

    е плъгин за WordPress, с който можете лесно и бързо да организирате галерия с изображения на вашия уебсайт с възможност да я видите в режим на слайдшоу. Дисплеят може да бъде или автоматичен, или напълно контролиран с демонстрация на миниатюри и надписи за изображения.

    Of.Site | Демонстрация

    Показва всички снимки за публикация/страница като слайдшоу. Лесен монтаж. Този плъгин изисква Adobe Flash за версията с анимации за преход, ако Flash не бъде намерен, плъзгачът работи както обикновено.

    Друг прост плъзгач за WordPress, той показва изображения за публикации и кратки съобщения за статии. Използвам точно такъв плъгин в този блог от време на време.

    Meteor Slides е слайдер на jQuery WordPress с над двадесет стила на преход, от които да избирате. Авторът нарече приставката „метеор“, вероятно предполагайки скоростта на работа; може би не забелязах нищо метеорично.

    oQey Gallery е пълноценна галерия с изображения с елементи на слайдшоу за WordPress, с вградени възможности за видео и музика.

    Това е слайдшоу с флаш анимационни елементи за гледане на изображения и видеоклипове в уебсайтове и блогове. Можете да поставите този плъзгач на всеки уебсайт, във всякакъв размер и с каквото съдържание искате.

    Плъгинът Flash Gallery превръща обикновените ви галерии в зашеметяващи стени с изображения, с поддръжка за множество албуми на публикация, гледане на цял екран и режим на слайдшоу.

    WOW Slider е плъзгач за изображения на jQuery за WordPress с невероятни визуални ефекти (експлозия, летене, щори, квадрати, фрагменти, основни, избледняване, подреждане, вертикално подреждане и линейни) и професионално проектирани шаблони.

    Promotion Slider е jQuery плъгин, който улеснява създаването на просто слайдшоу или внедряването на множество зони на въртящи се реклами на страница, тъй като това е много персонализиран инструмент, вие ще имате пълен контрол върху това, което показвате в плъзгача, и над това как модулът като цяло работи.

    | Демонстрация

    Ново във версия 2.4: поддръжка за сортиране на снимки чрез плъзгане и пускане директно през редактора на WordPress, както и възможност за добавяне на връзки към снимки към основните изображения. (IE8 може да има някои грешки, работи добре във всички основни браузъри. Авторите обещават пълна поддръжка за IE8 в бъдеще.)

    | Демонстрация

    Последният акорд на този преглед ще бъде този плъгин за WordPress, друг плъзгач с интересни визуални ефекти за избор и промяна на изображения.

    Гледам всичко описано по-горе и съм изумен какъв полет на фантазия имат тези хора, но това не е всичко, което различни уеб разработчици измислиха напоследък по темата за организиране на изображения в уеб проекти. Чудесно е, че вече е възможно да се реализират такива прекрасни решения за създаване на галерии и слайдшоута.
    Смея тихо да се надявам, че в тази колекция ще намерите нещо интересно за себе си, ще създадете своя собствена уникална галерия или слайдер, за радост на вашите потребители и, разбира се, на вашето любимо аз, а къде щяхме да сме без това...

    Когато разработвате уеб проект, вероятно се хващате, че си мислите, че би било хубаво да намерите някои прости, но полезни фото галерии или слайдшоута. Но представете си, че огромен брой галерии, разработени в AJAX, CSS, javascript, Lightbox и Flash, вече са във вашите ръце! Надяваме се, че тази статия ще ви бъде изключително полезна и ще можете да намерите точно това, което търсите.

    Безплатни скриптове за слайдшоу и лайтбокс

    Това е безплатна Flash галерия, проектирана от Кристофър Ейнарсруд.


    Създавайте ослепителни презентации, слайдшоута, банери с помощта на Active Slideshow Pro. Помощната програма има за цел да увеличи вероятността за успех при създаване на слайдшоута и ви дава контрол върху слайдовете, текста, преходите и аудиото.


    Изберете любимите си изображения, за да запълните целия екран. Това приложение, базирано на комбинация от PicLens и Media RSS технология, ви позволява лесно да добавяте слайдшоу към вашия собствен уебсайт. Тези експортирани галерии могат да се използват и като пълноценни уеб страници.


    Това е ново поколение безплатни системи за фотогалерии. Уеб приложението не е претрупано с ненужни функции и настройки. Но това не означава, че помощната програма е лоша; тя може да ви предложи това, от което се нуждаете, за да работите с изображения.


    Това е онлайн услуга за преглед на почти всички медийни формати, публикувани в Интернет. Услугата е написана на javascript и CSS, поради което е лесно да я проектирате по ваше желание.


    Създаване на преходи между изображения.


    Gallerific е вдъхновен от плъгина Cycle, създаден от Mike Alsup. Но с функционалност за създаване на големи обеми снимки.



    Помощна програма за показване на изображения, HTML съдържание и мултимедия в стил лайтбокс на Mac, който плава на повърхността на уеб страница.


    Ако правите сладка малка галерия, тогава ръчно изработено оформление ще свърши добра работа. Но ако говорим за големи галерии, тогава едва ли ще искате да напишете всичко това ръчно, има и други начини, а именно Автоматично генериране на галерия!

    Динамична галерия с изображения и слайдшоу - вече не работи



    Вероятно всеки вече е виждал уебсайта на Барак Обама, който очевидно е най-добрият от уебсайтовете, направени за кандидат-президенти. Той не само е пример за модерен креативен дизайн, но също така осигурява лесна работа и навигация.


    Добавка jQuery, която автоматично открива разширението на всеки медиен файл и го добавя към съответния плейър.


    Безплатна галерия, разработена на компактна, модулна и обектно-ориентирана платформа, използваща javascript библиотеката MooTools. Насочете го към папка с изображения и той автоматично ще ги изтегли с помощта на PHP.


    Flickrshow е леко JavaScript слайдшоу за различни браузъри, което предоставя лесен начин за показване на изображения на Flickr на страниците на вашия сайт.

    Protoflow - ресурсът е престанал да съществува


    Приложението е написано на javascript с помощта на Prototype и Scriptaculous, за да свърши тежката работа. Той също така използва Reflection.js за създаване на отражение на изображението.


    Много красив шаблон, разработен във Flash. Всяко изображение, което обърнете, оставя малко отражение на пода. Размерите на показаните изображения се редактират във файловете на шаблона. Също така е много лесно да добавите фоново изображение.


    Фотогалерия, разработена в AJAX и насочена към по-лесно управление. Базиран на javascript и библиотеката AJAX за MooTools. Не се изисква скрипт от страна на сървъра! Flash познания също не са необходими. Дори ако вашите изображения са във Flickr, SmugMug или вашия собствен сървър, тази помощна програма ще може да ги покаже.



    Безплатно уеб приложение, което ви позволява да показвате изображения от Flickr или Picasa във вашия блог или уебсайт.


    Фотогалерия с плавни преходи, пиктограми и приятни отражения.


    Безплатен Flash преглед на изображения с възможност за промяна на дизайна. Интерфейсът се състои от много пощенски картички, разпръснати около масата.


    Платформа на JavaScript, която ви позволява бързо да разработвате уеб страници с помощта на AJAX. Не разбирате нищо от javascript? Това вече не е проблем. Приложението е проектирано да изглежда повече като HTML и CSS, така че всеки с основни познания за изграждане на уебсайтове може да създаде следващото поколение уеб приложения, използвайки също AJAX.






    Този шаблон използва отличния javascript Lightbox, разработен от Lakesh Dakar.


    Създател на фотоалбуми, който ви позволява да създавате и публикувате богати и интерактивни фотогалерии на вашия уебсайт.


    Това приложение ви позволява да публикувате фото галерии на уебсайта си, дори и да не разбирате нищо от уеб програмиране. Всичко това благодарение на javascript платформата MooTools. Просто добавете някои javascript и CSS файлове.



    Безплатна програма за преглед на 3D Flash изображения с възможност за промяна на дизайна.

    Публикации по темата