Galerie photos - effet slide/glisse

Résolu
ruvele Messages postés 18 Statut Membre -  
omar-senegal Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'aimerais créer une sorte de galerie photos en faisant une transition "particulière" entre chaque photo : une sorte d'effet ajax : lorsque l'on clique sur la flèche, la photo suivant apparait avec un effet de glisse.
Pour cela, j'ai pensé à mettre toutes les images sur un seul calque et les faire avancer par des pas de 400 px (largeur de mes images). On m'a parlé de l'opérateur modulo pour cela mais j'avoue que je ne comprends pas bien comment agencer mon code.

voici ce que j'avais fait à la base mais il s'agit d'un défilement classique d'image. Est ce que quelqu'un pourrait m'aider à modifier mon code pour arriver à ce que j'explique ci-dessus ?

je vous remercie par avance,

voici le code initial :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title>Gallerie</title>

<script language="javascript" type="text/javascript">
	<!--
	
	var img_actuelle = 1;
	var no_images = 8;
	
	function go_avant() {
		
		document.getElementById("img"+img_actuelle).style.visibility = "hidden";
		
		img_actuelle--;
		
		if(img_actuelle < 1) { img_actuelle = no_images; }
		
		document.getElementById("img"+img_actuelle).style.visibility = "visible";
		
	}
	
	function go_apres() {
		
		document.getElementById("img"+img_actuelle).style.visibility = "hidden";
		
		img_actuelle++;
		
		if(img_actuelle > no_images) { img_actuelle = 1; }
		
		document.getElementById("img"+img_actuelle).style.visibility = "visible";
		
	}
	
	function generer() {
		
		var html = "";
		
		for(var i = 1; i < (no_images+1); i++) {
		
			html += '<div id="img'+i+'" class="images"><img src="pics/pic'+i+'.jpg" /></div>';
		
		}
		
		document.getElementById("boite_images").innerHTML = html;
		
	}

	//-->
	</script>
	
	<style type="text/css">
		
	#boite_galerie {
		position:absolute;
		width:400px;
		height:330px;
	}	
	
	#boite_images {
		position:absolute;
		width:400px;
		height:300px;
	}
	
	.boutons {
		position:absolute;
		width:30px;
		height:20px;
		top:310px;
		background-color:#FF0000;
	}
	
	#nav_apres {
		left:370px;
	}
	
	.images {
		position:absolute;
		visibility:hidden;
	}
	
	#img1 {
		visibility:visible;
	}
		
	</style>
	

</head>

<body onload="generer();">

<div id="boite_galerie">

	<div id="boite_images">
		
	</div>
	
	<div id="nav_avant" class="boutons" onclick="go_avant();"> <<< </div>
	
	<div id="nav_apres" class="boutons" onclick="go_apres();"> >>> </div>

	
</div>

</body>
</html>

Configuration: Windows XP
Firefox 2.0.0.12

3 réponses

  1. ruvele Messages postés 18 Statut Membre 5
     
    Voici la solution :

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<title>Galerie slide</title>
    
    
    <script language="javascript" type="text/javascript">
    	<!--
    	
    	var img_actuelle = 1;
    	var no_images = 8;
    	
    	var width = 400;
    	var proc = "vide";
    	
    	var pos = 0;
    	
    	function init() {	// créer le html pour toutes les images
    		
    		document.getElementById("boite_images").innerHTML = "";
    		
    		var html = "";
    		
    		for(var i = 1; i <= no_images; i++) {
    			
    			html += '<div id="img'+i+'" style="left:' + (i - 1) * width + 'px" class="images"><img src="pics/pic'+i+'.jpg" /></div>';
    			
    		}
    		
    		document.getElementById("boite_images").innerHTML = html;
    		
    		compter();		
    	}
    	
    	function go_avant() {	// pas en avant
    		
    		console.log("go_avant()");
    		
    		if(proc == "vide") {
    			
    			document.getElementById("nav_apres").style.visibility = "visible";
    			document.getElementById("nav_avant").style.visibility = "visible";
    			
    			img_actuelle--;
    			
    			if(img_actuelle == 1) {
    				document.getElementById("nav_avant").style.visibility = "hidden";	
    			}
    			
    			compter();
    		
    			proc = window.setInterval("animer(0)", 20);
    		}
    	}
    	
    	function go_apres() { 	// pas en arrière
    		
    		console.log("go_apres()");
    		
    		if(proc == "vide") {
    		
    			document.getElementById("nav_apres").style.visibility = "visible";
    			document.getElementById("nav_avant").style.visibility = "visible";
    			
    			img_actuelle++;
    			
    			if(img_actuelle == no_images) {
    				document.getElementById("nav_apres").style.visibility = "hidden";
    			}
    				
    			compter();
    			
    			proc = window.setInterval("animer(1)", 20);
    		}
    	}
    	
    	function animer(dir) {	// l'animation
    		
    		if(dir == 0) {
    			pos = pos + 25;
    		} else {
    			pos = pos - 25;
    		}
    		
    		if(pos % width == 0) {				// arreter tous les width (400) pixel
    			window.clearInterval(proc);
    			proc = "vide";
    		}
    		
    		for(var i = 1; i <= no_images; i++) {	// placer l'ensemble des images
    			
    			var newpos = (i-1) * width + pos;
    			
    			document.getElementById("img"+i).style.left = newpos  + "px";
    			
    		}
    		
    	}
    	
    	function compter() {
    		
    		document.getElementById("nav_indique").innerHTML = "( " + img_actuelle + " / " + no_images + " )";
    		
    	}
    
    	//-->
    	</script>
    	
    	<style type="text/css">
    		
    	#boite_galerie {
    		position:absolute;
    		width:400px;
    		height:330px;
    	}	
    	
    	#boite_images {
    		position:absolute;
    		width:400px;
    		height:300px;
    		overflow:hidden;
    	}
    	
    	.boutons {
    		position:absolute;
    		width:30px;
    		height:20px;
    		top:310px;
    		background-color:#FF0000;
    	}
    	
    	#nav_apres {
    		left:370px;
    	}
    	
    	#nav_avant {
    		visibility:hidden;
    	}
    	
    	#nav_indique {
    		left:180px;
    		width:50px;
    	}
    	
    	.images {
    		position:absolute;
    		visibility:visible;
    		top:0px;
    	}
    		
    	</style>
    	
    
    </head>
    
    <body onload="init();">
    
    <div id="boite_galerie">
    
    	<div id="boite_images"></div>
    	
    	<div id="nav_avant" class="boutons" onclick="go_avant();"> <<< </div>
    	
    	<div id="nav_indique" class="boutons"></div>
    	
    	<div id="nav_apres" class="boutons" onclick="go_apres();"> >>> </div>
    
    	
    </div>
    
    </body>
    </html>
    
    2
  2. omar-senegal Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   26
     
    salut j aimerais bien ke l on mexplik comment cela fonctionne cet effet merci
    -1
  3. omar-senegal Messages postés 271 Date d'inscription   Statut Membre Dernière intervention   26
     
    merci beaucoup je vais essayer pour voir
    -1