11519 sujets

JavaScript, DOM et API Web HTML5

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. 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;
}

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'));
});

Bonjour,
Je viens de trouver la solution pour synchroniser les 2 paginations.
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'));
});