Ceci est un exemple de travail de la façon dont je le ferais cela: http://jsbin.com/ogika
CSS:
.month.hide { display: none; }
HTML
<p><a href="#" class="month-next">Next Month</a></p>
<table class="month"><tr><td>a</td></tr></table>
<table class="month hide"><tr><td>b</td></tr></table>
<table class="month hide"><tr><td>c</td></tr></table>
<table class="month hide"><tr><td>d</td></tr></table>
JavaScript:
$(function() {
$(".month-next").click(function() {
var months = $(".month"), numMonths = months.length, curr = 0;
return function() {
//Hide the current table, by adding the 'hide' class
months.eq(curr).addClass("hide");
//Get the index of next table in the list
curr = (curr + 1) % numMonths;
//Show the next table, by removing the 'hide' class
months.eq(curr).removeClass("hide");
}
}());
});
Dans le code ci-dessus, months
est la liste des tables ... dans ce cas, détient 4 éléments; et numMonths
est le nombre d'éléments ... à savoir, 4.
La « magie » du code ci-dessus est cette ligne: curr = (curr + 1) % numMonths;
Cette ligne obtient l'indice de l'élément suivant à afficher, et fonctionne de manière circulaire.
Prenons un exemple:
0 1 2 3
=========================
| a | b | c | d |
=========================
Maintenant, disons que curr
est 0:
0 1 2 3
=========================
| a | b | c | d |
=========================
^
//curr is currently 0
curr = (curr + 1) % numMonths; //(0 + 1) % 4
//now, curr is 1
0 1 2 3
=========================
| a | b | c | d |
=========================
^
Après cette ligne de code est exécuté, curr
devient 1: (0 + 1)% 4 = 1. Cela signifie que l'index suivant de l'élément à afficher est 1.Par conséquent, nous obtenons l'élément suivant et montrer, en supprimant la classe hide
: months.eq(curr).removeClass("hide");
Maintenant, regardons l'exemple où curr
est le dernier élément: 3
0 1 2 3
=========================
| a | b | c | d |
=========================
^
//curr is currently 3
curr = (curr + 1) % numMonths; //(3 + 1) % 4
//now, curr is 0
0 1 2 3
=========================
| a | b | c | d |
=========================
^
Comme vous pouvez le voir, curr
est maintenant 0 ... et ainsi le cycle continue.
Ok, bien mieux que ma réponse. Bien plus fluide. Cependant, ne prend pas soin de revenir au premier élément lorsque le dernier est visible: P – Jamiec
a probablement besoin d'une vérification à la fin avant le retour: if ($ ("table"). HasClass ('month-show') .length <1) $ ('table'). eq (0) .addClass ('mois-show'); –
@Jamiec .. et donc pas mieux que votre réponse :) – harpax