Partage
  • Partager sur Facebook
  • Partager sur Twitter

Caroussel en javascript

12 avril 2010 à 14:23:33

Bonjour a tous,

N'ayant pas de réponse je reposte ici.
Je souhaiterais faire un caroussel avec des photos qui défile de droite a gauche automatiquement.

J'ai fais plusieurs tentative infructueuse.

Quelques petites infos:

- Les photos son chargé via php.
- Il n'y a pas d'effet particulier. Elles glissent tout simplement de droite a gauche.


Au cas ou je vous montre ce que j'ai fais:

<div id="slideShow">
	<div id="Gallery" onmouseover="stopSlider();" onmouseout="Slider();">
		<?php
		for($a=0;$a<20;$a++)
		echo '<a href="#" class="image-slider"></a>';
		
		?>
	</div>
</div>

/*********************************/
/*           Slider              */
/*********************************/

#slideShow{
	width:600px;
	height:150px;
	background-color:#171717;
	overflow:hidden;
	position:relative;
	top:350px;
	right:800px;
}

#Gallery{
	height:150px;
	position:relative;
	left:0;
}

.image-slider{
	width:150px; 
	height:150px; 
	background-color:blue; 
	position:absolute; 
	display:block;
}

/* Positionement de chaque images */
function placeElement(){
	var Obj = document.getElementById('Gallery');
	var a = Obj.getElementsByTagName("a");
	var add = 0;
	
	for(var i = 0 ; i < a.length ; i++){
		a[i].style.left = (10 + add)+ 'px';
		add += 160;
	}
	
	Slider();
}


/* Mise en place du déplacement */
function Slider(){
	var Obj = document.getElementById('Gallery'); // Conteneur
	var a = Obj.getElementsByTagName("a"); // Selection de tous les lien/images
	var largeur = 0; // Width du conteneur
	var tmp,tmp2;
	var posObj = parseInt(Obj.offsetLeft); // Position du conteneur
	
	tmp = a[(a.length - 1)].style.left; // position du dernier lien/image
	tmp = tmp.split('px');
	largeur = parseInt(tmp[0]) + 150;
	Obj.style.width = largeur + 'px'; // affectation de la taille du conteneur
	
	Timer = setTimeout(function(){
		for(var i = 0 ; i < a.length ; i++){
			tmp = a[i].style.left;
			tmp = tmp.split('px');
			tmp = parseInt(tmp[0]);
			if((largeur - tmp) < posObj){ // Si l'élément <a> en cours est en position inferieur au conteneur
				tmp2 = a[(a.length - 1)].style.left;
				tmp2 = tmp2.split('px');
				tmp2 = parseInt(tmp2[0]);
				a[i].style.left = (largeur + 150) + 'px'; // on le place a la fin
			}
			a[i].style.left = (tmp - 10) + 'px'; // on bouge tout les liens/images vers la gauche
		}
		Slider();
		
	},20);
}

function stopSlider(){
	clearTimeout(Timer);
}
  • Partager sur Facebook
  • Partager sur Twitter
$2b||!$2b
12 avril 2010 à 14:33:04

Ben, ton effet consiste simplement à agrandir ou réduire les images selon qu'elles sont plus ou moins proche du centre.

Donc, là où tu as a[i].style.left..., tu rajoutes a[i].style.width et tu règles selon ton bon plaisir.
  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2010 à 15:01:49

Justement je ne veux pas que les images grandisses ou pas je veux juste qu'elles gardent leur taille d'origine. En faite ce qui me pose problème c'est de mettre la premiere image en derniere quand celle-ci n'est plus visible.
Un truc comme sa en gros:
Image utilisateur
  • Partager sur Facebook
  • Partager sur Twitter
$2b||!$2b
12 avril 2010 à 15:07:29

Plutôt que de recréer un sujet tu aurais dû upper l'autre >_<

Mets l'autre en résolu alors.
  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2010 à 15:16:14

Essaye de jouer avec les modulos.

Genre : y = (x + 50) % 100 - 50

Quand x augmente, y augmente proportionnellement, et quand x arrive à 50, y repart à -50.
  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2010 à 15:53:57

Je ne vois pas l'utilisation de modulo. Moi je me disais que puisque je connais la largeur d'une image que je connais l'espacement entre chaque images, je placerais la premiere image a n*(largeurImage+Espacement),
concretement la somme fait 2000px environs donc quand l'image ne sera plus visible ben je la positione a 2000px mais ma sa ne fonctionne pas .
  • Partager sur Facebook
  • Partager sur Twitter
$2b||!$2b
12 avril 2010 à 16:05:24

Ben ouai, donc joue avec les modulos pour que tes images restent toujours dans une fourchette qui est la zone visible.
  • Partager sur Facebook
  • Partager sur Twitter
12 avril 2010 à 17:31:22

Citation : skuti

Bonjour a tous,

N'ayant pas de réponse je reposte ici.



Non. Si on a mis une protection pour vous empêcher de upper vos topics à intervalles trop rapprochés, ce n'est pas pour que vous vous mettiez à créer 2, 3 ou 42 topics sur le même problème.

Si tu n'obtiens pas de réponses, inonder les forums dans l'espoir que quelqu'un voie ton sujet n'est pas une bonne approche. Si tout le monde faisait ainsi, le forum deviendrait carrément illisible, coulé sous les sujets redondants. En plus, ça fait descendre les autres sujets au profit du tien, c'est donc irrespectueux pour les autres posteurs. Tu attends donc ton tour pour upper, après les douze heures de protection. Entre temps, tu peux essayer d'améliorer le topic, en te demandant ce qui ne va pas dedans, puis en éditant pour corriger.

La discussion se poursuit donc sur l'autre topic, merci.

Edit : j'ai bien conscience qu'il aurait été plus pragmatique de fermer l'autre sujet et de laisser la discussion se poursuivre ici, mais ça reviendrait à ne rien faire du tout : la discussion aurait débordé de son sujet initial.
  • Partager sur Facebook
  • Partager sur Twitter
J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.