In questo articolo vorrei mostrare una semplice soluzione in jQuery per la creazione di un sistema di paginazione per uno slideshow che mostri il numero corrente e l'avanzamento delle slide.
Partiamo dalla seguente marcatura:
<div id="slideshow">
<div id="slideshow-wrapper">
<div class="slide" id="s1"></div>
<div class="slide" id="s2"></div>
<div class="slide" id="s3"></div>
<div class="slide" id="s4"></div>
</div>
<div id="slideshow-nav">
<a href="#s1">1</a>
<a href="#s2">2</a>
<a href="#s3">3</a>
<a href="#s4">4</a>
<div><span id="slideshow-nav-current">1</span> of <span id="slideshow-nav-total"></span>
</div>
</div>
</div>
Da questa struttura appare chiaro come effettivamente vi siano solo due elementi nella paginazione che a noi interessano, vale a dire gli elementi con ID slideshow-nav-current
e
slideshow-nav-total
. Dato che si comincia sempre dalla prima slide, il primo elemento avrà come contenuto testuale il numero 1 sin dall'inizio. Viceversa il numero totale delle slide
verrà calcolato da jQuery e andrà nel secondo elemento (inizialmente vuoto).
Quindi possiamo scrivere il seguente codice:
var Slideshow = {
paginate: function () {
var slides = $('div.slide', '#slideshow'),
total = slides.length; // numero totale di slide
$('#slideshow-nav-total').text(total);
slides.each(function (i) {
// aggiungo il numero corrispondente a ciascuna slide
$(this).data('index', i + 1);
});
},
navigate: function () {
$('a', '#slideshow-nav').click(function (e) {
e.preventDefault();
var $a = $(this);
var slide = $($a.attr('href'));
var wrapper = $('#slideshow-wrapper');
wrapper.animate({
left: -slide.position().left
}, 1000, 'linear', function () {
// mostro il numero corrente
$('#slideshow-nav-current').text(slide.data('index'));
$a.addClass('active').siblings('a').removeClass('active');
});
});
},
init: function () {
this.paginate();
this.navigate();
}
};
$(function () {
Slideshow.init();
});