Сегодня я решил рассказать Вам о том, как сделать свой собственный слайдер. Конечно существует очень много готовых решений, однако большая часть из низ слишком громоздка.
Слайдер мы будет создавать с использованием библиотеки JQuery. В наш слайдер мы заложим функционал настроек (сделаем опциональное автопереключение).
Первый этап — создаем верстку. Обратите внимание на жирное выделение. Данным атрибутом мы будем назначать id элементов для навигации по слайдам. Главное что нужно сделать — указать размеры нашего слайдера. Все остальные стили не обязательны. Вы можете оформить слайдер как Вам угодно.
<style>
.fs-slider { border: 1px solid #000; width: 400px; height: 200px; } /*задаем размеры слайдера */
.fs-slider .image { width: 400px; height: 200px; background-size: cover; background-position: center center; } /* задаем стиль содержимого слайда */
</style>
<a id="fsl" href="javascript:;" title="Назад">Назад</a>
<a id="fsr" href="javascript:;" title="Вперед">Вперед</a>
<div data-nav-left="fsl" data-nav-right="fsr" id="fs-slider" class="fs-slider">
<div class="fs-slides">
<div class="fs-slide">
<div class="image" style="background-image:url('/wp-content/uploads/samples/8c5c9b8ba323.jpg')"></div>
</div>
<div class="fs-slide">
<div class="image" style="background-image:url('/wp-content/uploads/samples/1225141003_1-21.jpg')"></div>
</div>
<div class="fs-slide">
<div class="image" style="background-image:url('/wp-content/uploads/samples/1225141006_1-11.jpg')"></div>
</div>
</div>
</div>
Шаг второй — создаем скрипт слайдера с использованием jquery.
$.fn.fsSlider = function(settings) {
settings = settings || {}; //settings не обязательный параметр
var $this = this; //сохраним ссылку на текущий объект
$this.settings = { //зададим настройки по умолчанию
autoPlay: 10 //Автоматически слайды меняем через 10 секунд (по умолчанию)
};
$.extend($this.settings, settings); //соединим настройки из параметра с настройками по умолчанию
function _fsSliderNav(offset) { //функция листания слайдов
$this.current += offset;
$this.current = $this.current < 0 ? $this.count - 1 : $this.current % $this.count; //считаем какой слайд следующий
$this.find('.fs-slides').animate({ left: '-' + ($this.width() * $this.current) + 'px' }, 'fast'); //сдвигаем блок слайдов влево до текущего слайда
}
function _clearAutoPlay() { //останавливаем автосмену слайдов
if($this.autoPlayTimer != null) {
clearInterval($this.autoPlayTimer);
$this.autoPlayTimer = null;
}
}
$this.current = 0; //первый слайд
$this.count = this.find('.fs-slides .fs-slide').length; //считаем число слайдов
$this.autoPlayTimer = $this.settings.autoPlay > 0
? setInterval(function() { _fsSliderNav(1); }, $this.settings.autoPlay * 1000)
: null; //если настройка autoPlay больше нуля, запускаем автосмену
//задаем стили слайдеру, пусть они создаются автоматом.
//это позволит экономить время, чтобы не писать одни и те же стили каждый раз
//заметьте, что здесь жесткая привязка к классам html тегов
$this.css({
overflow: 'hidden',
position: 'relative',
});
$this.find('.fs-slides').css({
width: ($this.count * $this.width()) + 'px',
height: $this.height() + 'px',
position: 'absolute',
top: '0px',
left: '0px',
});
$this.find('.fs-slide').css({
position: 'relative',
height: $this.height() + 'px',
float: 'left',
width: $this.width() + 'px'
});
//если указан id стрелки влево и она существует, повесим событие клика на нее
if($this.data('nav-left') && $('#' + $this.data('nav-left')).length == 1) {
$('#' + $this.data('nav-left')).click(function() {
_fsSliderNav(-1);
_clearAutoPlay(); //отключаем автопереключение, если нажали на навигацию
});
}
//если указан id стрелки вправо и она существует, повесим событие клика на нее
if($this.data('nav-right') && $('#' + $this.data('nav-right')).length == 1) {
$('#' + $this.data('nav-right')).click(function() {
_fsSliderNav(1);
_clearAutoPlay();
});
}
}
//Создаем слайдер
$('#fs-slider').fsSlider();
В итоге получаем вот такой простой, не тяжелый, а главное легко редактируемый слайдер: