Откроем в блокноте js код галереи и внимательно посмотрим на него. Не знаю как вам, а мне, например, кажется не очень удобно, если придется поменять id обертывающему блоку, то в коде это нужно сделать в четырех местах. Проще обьявить переменную, в которой будет хранится id нужного болка. Попробуем это сделать. Создадим переменную с именем elWrap и присвоим ней значение $('#slider'). Теперь в коде можно обращаться к элементу #slider уже через эту переменную. Вот как будет выглядеть js:
$(function () {
var elWrap = $('#slider'),
el = elWrap.find('img'),
indexImg = 1,
indexMax = el.length;
function change () {
el.fadeOut(500);
el.filter(':nth-child('+indexImg+')').fadeIn(500);
}
function autoCange () {
indexImg++;
if(indexImg > indexMax) {
indexImg = 1;
}
change ();
}
var interval = setInterval(autoCange, 3000);
elWrap.mouseover(function() {
clearInterval(interval);
});
elWrap.mouseout(function() {
interval = setInterval(autoCange, 3000);
});
elWrap.append('<span class="next"></span><span class="prev"></span>');
$('span.next').click(function() {
indexImg++;
if(indexImg > indexMax) {
indexImg = 1;
}
change ();
});
$('span.prev').click(function() {
indexImg--;
if(indexImg < 1) {
indexImg = indexMax;
}
change ();
});
});
Согласитесь, стало значительно удобнее. Достаточно поменять id в html коде для обертывающего блока и присвоить это значение перемененной elWrap. Больше ничего нигде менять не потребуется.
Аналогично поступим и со значением, отвечающим за интервал времени, спустя который происходит смена фото. Объявим переменную phase и сохраним в ней нужное значение.
Сложности могут возникнуть, если мы решим создать переменные для навигационных кнопок. Даже не сложности, а маленький нюанс. Если объявить переменные в самом начале кода, то в этом случае кнопки не заработают. Дело в том, что физически кнопки появляются позже, нежели считываются переменные, созданные для них и jQuery их проигнорирует.
Решить проблему можно по разному - например, вставить разметку для навигации непосредственно в html и тогда никаких вопросов с видимостью переменных не возникнет.
Либо, если, ну никак нельзя поменять html, то объявить переменные после того, как будет добавлена разметка для кнопок с помощью js. В нашем случае будем использовать второй вариант. Окончательный код теперь у нас будет выглядеть следующим образом:
$(function () {
var elWrap = $('#slider'),
el = elWrap.find('img'),
indexImg = 1,
indexMax = el.length,
phase = 3000;
function change () {
el.fadeOut(500);
el.filter(':nth-child('+indexImg+')').fadeIn(500);
}
function autoCange () {
indexImg++;
if(indexImg > indexMax) {
indexImg = 1;
}
change ();
}
var interval = setInterval(autoCange, phase);
elWrap.mouseover(function() {
clearInterval(interval);
});
elWrap.mouseout(function() {
interval = setInterval(autoCange, phase);
});
elWrap.append('<span class="next"></span><span class="prev"></span>');
var btnNext = $('span.next'),
btnPrev = $('span.prev');
btnNext.click(function() {
indexImg++;
if(indexImg > indexMax) {
indexImg = 1;
}
change ();
});
btnPrev.click(function() {
indexImg--;
if(indexImg < 1) {
indexImg = indexMax;
}
change ();
});
});
В заключении ссылка на готовую галерею.
Ну а мы в следующей статье поговорим, как создать слайдер с прокруткой (карусель).