11496 sujets

JavaScript, DOM et API Web HTML5

Bonjour !

comme je ne trouvais pas ce que je voulais, j'ai fait mon propre petit diaporama.
il y a un bouton suivant et un bouton précédent, avec des images qui glissent en haut ou en bas en fonction du bouton cliqué.
actuellement, le div contenant les images monte (ou descend) en faisant disparaitre les images lorsqu'il n'y en a plus.

je souhaiterai que lorsque qu'il n'y a plus d'images, le bouton "suivant" passe en grisé, ou reprenne les premières images.

auriez-vous une piste, ou un tuto à me suggérer ?
voici mon code complet :

<!DOCTYPE html>
<html>
<head>
  <style>
#top {
  position: relative;
  overflow : hidden;
  background-color: #ccc;
width: 120px; 
height: 500px;
}
 
#centre {
  position: absolute;
  top: 0;
  left: 0;
}
.images a img {
    opacity: 0.3;/* l'opacite que vous voulez au depart */
    border: none;/* enlever les border d'une image en lien */
    -ms-filter: "prodig:DXImageTransform.Microsoft.Alpha(Opacity=25)"; /* Hack IE8 */
    filter: alpha(opacity = 25); /* Hack IE 5-7 */
    -webkit-transition: opacity 0.5s ease-in-out;/* transition pour Chrome et Safari */
    -moz-transition: opacity 0.5s ease-in-out;/* transition pour Firefox */
    -o-transition: opacity 0.5s ease-in-out;/* transition pour Opéra */
    transition: opacity 0.5s ease-in-out; /* on écrit cette ligne à la fin de façon à ce que ce soit elle qui soit prise en compte lorsque l'attribut transition sera pris en compte par tous les navigateurs */
 
}
.images a:hover img, .images a:focus img {
    opacity: 0.9; /* opacite au survol */
    -ms-filter:"prodig:DXImageTransform.Microsoft.Alpha(Opacity=90)"; /* Hack IE 8 */
    filter: alpha(opacity = 90); /* Hack IE 5-7 */
}
</style>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<button id="back">Back</button>
<div id="top">
  <div id="centre" class="block">
<div class="images">
<a href="#"><img class="block" src="img.png"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.png"/></a> 
</div>
  </div>
</div>

<button id="go">Go</button> 
<button id="stop">STOP!</button>

<script>
/* Start animation */
$("#go").click(function(){
$(".block").animate({top: '+=200px'}, 1000);
});

/* Stop animation when button is clicked */
$("#stop").click(function(){
$(".block").stop();
});

/* Start animation in the opposite direction */
$("#back").click(function(){
$(".block").animate({top: '-=200px'}, 1000);
});

</script>

</body>
</html>


en vous remerciant par avance Smiley smile
Modifié par eliza (29 Apr 2014 - 12:47)
genre ça :


/* Start animation */
$(function() {
	var i = 0;
	var taille = 397
	var moven = (4 * taille) * -1;
	$(":button").click(function(){
		if(this.id == 'go' && i > moven){
			$(".block").animate({top: '-=397px'}, 1000);
			i -= taille;
		}
		else if(this.id == 'back' && i < 0){
			$(".block").animate({top: '+=397px'}, 1000);
			i += taille;
		}
		else if(this.id == 'back'){
			$(".block").stop();
		}
		else {
			i = 0;
			$(".block").css({top: '0px'});
		}
	});
});


1) j'ai un peu optimisé ton code au passage :

$(function() {});
pour que le js puisse être utlisé seulement lorsque la page ainsi que les images sont bien chargées

Puis met ton link de jquery fin de page c'est plus ergonomique.
<script src="http://code.jquery.com/jquery-latest.js"></script>
en

2) change la valeur de la variable taille pour l'adapter à celle de tes images.

3) change aussi la valeur dans la variable moven j'ai mis 4 pour le nombre d'images qu'il y a dans ton slide.

J'espère que c'est ok ? Smiley smile
Bonjour Tsaki,

je te remercie beaucoup pour ton aide Smiley biggrin

j'ai intégré ton code : (il y avait une petite inversion entre go et back, j'ai rectifié)
actuellement ça fonctionne bien pour l'un des boutons. l'autre continue à faire disparaitre mes images si on clique trop dessus.
Mais la solution est là, je vais étudier ton code pour limiter le deuxième bouton, je reviendrai pour mettre la solution si j'y arrive, ou dire ce qui coince.

ps : j'ai essayé de mettre le link jquery en bas de page comme tu le suggères, mais si le script de la fonction est placé avant l'appel jquery, ça ne fonctionne pas. Ce qui me parait logique à moins que quelque chose m'échappe ?

merci encore, et à plus tard,

E.
Oui effectivement le

<script src="http://code.jquery.com/jquery-latest.js"></script>


va bien en fin de page mais juste avant l'utilisation des functions jquery.
Re,

Alors finalement je reviens Smiley decu
je n'arrive pas à bloquer le bouton "go"

j'ai mis un lien vers le résultat ici :
http://elisa.rey.free.fr/test/

j'ai mis des commentaires pour décortiquer le fonctionnement du javascript que tu m'as donné.
il semble que le bouton "go" fonctionne lorsque la position du déplacement est supérieure à -756 (qui correspond à "moven"), comme indiqué dans la première condition, mais aussi quand la valeur y est inférieure.
j'ai fait plusieurs essais (je n'ai pas tout mis), en m'inspirant des instructions du bouton "back" qui fonctionne bien, mais sans succès, quelque chose m'échappe.

voici le code :
<!DOCTYPE html>
<html>
<head>

 <style>
#top {
  position: relative;
  overflow : hidden;
  background-color: #ccc;
width: 174px; 
height: 255px;
}
 
#centre {
  position: absolute;
  top: 0;
  left: 0;
}
.images a img {
    opacity: 0.3;/* l'opacite que vous voulez au depart */
    border: none;/* enlever les border d'une image en lien */
    -ms-filter: "prodig:DXImageTransform.Microsoft.Alpha(Opacity=25)"; /* Hack IE8 */
    filter: alpha(opacity = 25); /* Hack IE 5-7 */
    -webkit-transition: opacity 0.5s ease-in-out;/* transition pour Chrome et Safari */
    -moz-transition: opacity 0.5s ease-in-out;/* transition pour Firefox */
    -o-transition: opacity 0.5s ease-in-out;/* transition pour Opéra */
    transition: opacity 0.5s ease-in-out; /* on écrit cette ligne à la fin de façon à ce que ce soit elle qui soit prise en compte lorsque l'attribut transition sera pris en compte par tous les navigateurs */
 
}
.images a:hover img, .images a:focus img {
    opacity: 0.9; /* opacite au survol */
    -ms-filter:"prodig:DXImageTransform.Microsoft.Alpha(Opacity=90)"; /* Hack IE 8 */
    filter: alpha(opacity = 90); /* Hack IE 5-7 */
}
</style>


</head>
<body>
<button id="back">Back</button>
<div id="top">
  <div id="centre" class="block">
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
<div class="images">
<a href="#"><img class="block" src="img.jpg"/></a> 
</div>
  </div>
</div>

<button id="go">Go</button> 
<button id="stop">réinitialisation</button>


  <script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
/* Start animation */
$(function() {
	var i = 0; /* position du déplacement */
	var taille = 84 /* hauteur d'une image */
	var moven = (9 * taille) * -1; /* taille déplacement maximal : -756 */
	$(":button").click(function(){
		if(this.id == 'go' && i > moven){ /* si clic sur "go" et valeur du déplacement > taille hauteur maximale */
			$(".block").animate({top: '-=252px'}, 1000); /* déplacement */
			i -= taille; /* attribution à i de la nouvelle position */
		}
		/*else if(this.id == 'go' && i < moven){
			$(".block").stop();
		}
		else if(this.id == 'go' && i < 756){
			$(".block").stop();
			}
			else if(this.id == 'go' && i < 0){
			$(".block").stop();
			}*/
		else if(this.id == 'back' && i < 0){
			$(".block").animate({top: '+=252px'}, 1000);
			i += taille;
		}
		else if(this.id == 'back'){
			$(".block").stop();
		}		
		
		else {
			i = 0;
			$(".block").css({top: '0px'});
		}
	});
});
</script>


</body>
</html>


je continue à chercher, mais si tu passes par là...

Ps : comment afficher le code correctement dans mes messages ? c'est tout à la queue leuleu Smiley confus
Finalement j'ai contourné le problème.

Au lieu de calculer la hauteur des images et la taille du diapo, j'ai donné à la variable i lenombre d'occurrences.

elle peut se calculer en dynamique (hauteur d'une image * nbre d'images : hauteur du mouvement)
là je l'ai mis en statique, dans mon cas ça fait 3 :
$(function() {
	var i = 0; /* nombre de clic */
	$(":button").click(function(){
		if(this.id == 'go' && i < 3){ 
			$(".block").animate({top: '-=252px'}, 1000); /* déplacement */
			i += 1; 
		}
		else if(this.id == 'back' && i > 0){
			$(".block").animate({top: '+=252px'}, 1000);
			i -= 1;
		}
		else if(this.id == 'back'){
			$(".block").stop();
		}		
	});
});


merci tsaki !