synchroniser 2 paginations ( numéros et prev/next)

Petit nouveau ! | 7 Messages

14 mai 2014, 18:55

Bonjour,
Jai un slider sur lequel j'essaie de mettre une pagination.
En suivant les tutos sur le web (car je suis un débutant), j'ai trouvé 2 systèmes de pagination: l'un avec des puces numérotées de chaque slide, et l'aute pagination avec juste prev et next.
Je les ai combiné pour avoir une pagination style: 1 2 3 4 5 6 7 << >>, mais ne réussie pas à synchroniser les 2 modes car ils restent indépendants l'un de l'autre, et j'aimerais que la pagination numérotée suive les click sur prev/next. Je m'explique : si je suis sur le slide1 et que je clique sur next, j'affiche bien le slide 2 mais la puce numérotée portant le numéro du slide2 n'est pas mise en valeur avec la classe .active .
Quelqu'un pourrait-il m'indiquer comment faire au niveau du js ?
Merci.
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
	<!--[if lt IE 9]><script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
	<title>mix paginations </title>
	<link href="carrousel.css" rel="stylesheet" type="text/css"  />
	<script src="jquery-1.10.1.min.js" type="text/javascript"></script>
	<script src="script.js" type="text/javascript"></script>
</head>
<body>
	<div id="carrousel">
		<div id="slide1" class="slide"><img src="img/slide1.png"></div>
		<div id="slide2" class="slide"><img src="img/slide2.png"></div>
		<div id="slide3" class="slide"><img src="img/slide3.png"></div>
		<div id="slide4" class="slide"><img src="img/slide4.png"></div>
		<div id="slide5" class="slide"><img src="img/slide5.png"></div>
		<div id="slide6" class="slide"><img src="img/slide6.png"></div>
		<div id="slide7" class="slide"><img src="img/slide7.png"></div>
	</div>
</body>
</html>
#carrousel{
	border: 5px solid #e7dbc5;
	width: 712px;
	height: 264px;
	margin: 0 auto;
	position: relative;
	overflow: hidden;
}
.slide{
	position: absolute;
	top: 0px;
	left: 0px;
	width: 712px;
	height: 264px;
}
.navigation_num{
	position: absolute;
	bottom: 38px;
	right: 70px;
}
.navigation_btn{
	position: absolute;
	bottom: 38px;
	right: 5px;
}
.navigation_num span,.navigation_btn .suivant, .navigation_btn .precedent{
	background: #000;
	color: #fff;
	padding: 2px 4px;
	cursor: pointer;
}
.navigation_num span:hover,.navigation_btn .suivant:hover,.navigation_btn .precedent:hover,.navigation_num span.active{
	background: yellow;
	color: #000;
}
[javascript]var carrousel = {
nbSlide : 0,
nbCurrent : 1,
elemCurrent : null,
elem : null,

init : function(elem){
this.nbSlide = elem.find('.slide').length;

//Créer la navigation
elem.append('<div class="navigation_num"></div>');
for(var i = 1;i<= this.nbSlide;i++){elem.find('.navigation_num').append('<span>'+i+'</span>');}
elem.append('<div class="navigation_btn"></div>');/* on crée la div navigation avec boutons flèches*/
elem.find(".navigation_btn").append('<span class="precedent"><--</span><span class="suivant">--></span>');/*on crée les span flèches*/

elem.find('.navigation_num span').click(function(){carrousel.gotoSlide($(this).text());})
elem.find(".navigation_btn .suivant").click(function(){carrousel.gotoNextImage(carrousel.nbCurrent+1);});
elem.find(".navigation_btn .precedent").click(function(){carrousel.gotoPreviousImage(carrousel.nbCurrent-1);});

//Initialisation du carrousel
this.elem = elem;
elem.find('.slide').hide();
elem.find('.slide:first').show();
this.elemCurrent = elem.find('.slide:first');
this.elem.find('.navigation_num span:first').addClass('active');
},
//Fonctions de navigation
//numéros
gotoSlide : function(num){
if(num == this.nbCurrent){return false;}
this.elemCurrent.hide();
this.elem.find('#slide'+num).show();
this.elem.find('.navigation_num span').removeClass('active');
this.elem.find('.navigation_num span:eq('+(num-1)+')').addClass('active');
this.nbCurrent = num;
this.elemCurrent = this.elem.find('#slide'+num);
},
//suivant
gotoNextImage : function (num){
if(num <= this.nbSlide) // on vérifie que l'on ne soit pas à la fin des images
{
this.elemCurrent.hide(); // quand on click, cache le slide en cours
this.elem.find("#slide"+ num).show(); // on va ensuite chopper le slide en fonction de son indice
this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours
}
else // sinon on retourne au slide 1
{
num=1;
this.elemCurrent.hide();
this.elem.find("#slide"+ num).show(); // on va ensuite chopper l'elem en fonction de son indice
this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours
}
},
//Precedent
gotoPreviousImage : function (num){
if(num<1) // si on veut aller, en dessous de 0, on retourne au dernier slide
{
num=this.nbSlide;
this.elemCurrent.hide(); // quand on click, cache le slide en cours
this.elem.find("#slide"+ num).show(); // on va ensuite chopper l'elem en fonction de son indice
this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours
}
else
{
this.elemCurrent.hide();
this.elem.find("#slide"+ num).show(); // on va ensuite chopper l'elem en fonction de son indice
this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours

}

},
}
$(function(){
carrousel.init($('#carrousel'));
});
[/javascript]

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

14 mai 2014, 19:45

Salut,

A vu de nez tu as oublier ces deux lignes
[javascript] this.elem.find('.navigation_num span').removeClass('active');
this.elem.find('.navigation_num span:eq('+(num-1)+')').addClass('active');[/javascript]


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

15 mai 2014, 13:04

A vu de nez tu as oublier ces deux lignes
Vous voudriez bien développer tant se peut votre post,dans un souci pédagogique.

Petit nouveau ! | 7 Messages

15 mai 2014, 14:53

Merci moogli de m'avoir mis la puce à l'oreille. J'ai réussi la synchro des 2 paginations.
Voici le code complet:
[javascript]var carrousel = {
nbSlide : 0,
nbCurrent : 1,
elemCurrent : null,
elem : null,

init : function(elem){
this.nbSlide = elem.find('.slide').length;

//Créer la navigation
elem.append('<div class="navigation_num"></div>');
for(var i = 1;i<= this.nbSlide;i++){elem.find('.navigation_num').append('<span>'+i+'</span>');}
elem.append('<div class="navigation_btn"></div>');/* on crée la div navigation avec boutons flèches*/
elem.find(".navigation_btn").append('<span class="precedent"><--</span><span class="suivant">--></span>');/*on crée les span flèches*/

elem.find('.navigation_num span').click(function(){carrousel.gotoSlide($(this).text());})
elem.find(".navigation_btn .suivant").click(function(){carrousel.gotoNextImage(carrousel.nbCurrent+1);});
elem.find(".navigation_btn .precedent").click(function(){carrousel.gotoPreviousImage(carrousel.nbCurrent-1);});

//Initialisation du carrousel
this.elem = elem;
elem.find('.slide').hide();
elem.find('.slide:first').show();
this.elemCurrent = elem.find('.slide:first');
this.elem.find('.navigation_num span:first').addClass('active');
},
//Fonctions de navigation
//numéros
gotoSlide : function(num){
if(num == this.nbCurrent){return false;}
this.elemCurrent.hide();
this.elem.find('#slide'+num).show();
this.elem.find('.navigation_num span').removeClass('active'); /////////////////////////////
this.elem.find('.navigation_num span:eq('+(num-1)+')').addClass('active'); /////////////////////////////
this.nbCurrent = num;
this.elemCurrent = this.elem.find('#slide'+num);
},
//suivant
gotoNextImage : function (num){
if(num <= this.nbSlide) // on vérifie que l'on ne soit pas à la fin des images
{
this.elemCurrent.hide(); // quand on click, cache le slide en cours
this.elem.find("#slide"+ num).show(); // on va ensuite chopper le slide en fonction de son indice
this.elem.find('.navigation_num span').removeClass('active'); /*++++++++++++++*/
this.elem.find('.navigation_num span:eq('+(num-1)+')').addClass('active'); /*++++++++++++++*/
this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours
}
else // sinon on retourne au slide 1
{
num=1;
this.elemCurrent.hide();
this.elem.find("#slide"+ num).show(); // on va ensuite chopper l'elem en fonction de son indice
this.elem.find('.navigation_num span').removeClass('active'); /*++++++++++++++*/
this.elem.find('.navigation_num span:eq('+(num-1)+')').addClass('active'); /*++++++++++++++*/


this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours
}
},
//Precedent
gotoPreviousImage : function (num){
if(num<1) // si on veut aller, en dessous de 0, on retourne au dernier slide
{
num=this.nbSlide;
this.elemCurrent.hide(); // quand on click, cache le slide en cours
this.elem.find("#slide"+ num).show(); // on va ensuite chopper l'elem en fonction de son indice
this.elem.find('.navigation_num span').removeClass('active'); /*++++++++++++++*/
this.elem.find('.navigation_num span:eq('+(num-1)+')').addClass('active'); /*++++++++++++++*/
this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours
}
else
{
this.elemCurrent.hide();
this.elem.find("#slide"+ num).show(); // on va ensuite chopper l'elem en fonction de son indice
this.elem.find('.navigation_num span').removeClass('active'); /*++++++++++++++*/
this.elem.find('.navigation_num span:eq('+(num-1)+')').addClass('active'); /*++++++++++++++*/

this.nbCurrent = num; // on met à jour l'indice de l'élement en cours
this.elemCurrent = this.elem.find("#slide"+num); // on met à jour l'elem en cours

}

},
}
$(function(){
carrousel.init($('#carrousel'));
});
[/javascript]
#-o =D>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

19 mai 2014, 15:46

dans ce cas peux tu cliquer sur le bouton résolus a coté du titre STP ?

c'est une bonne habitude a prendre permettant à tous de cibler les sujets comportant une réponse qui peux être utile (lorsque l'on recherche sur le forum).


merci

@+
Il en faut peu pour être heureux ......