Slideshow javascript, position premier slide

Résolu/Fermé
SteeveC Messages postés 8 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 30 avril 2012 - 16 oct. 2011 à 19:45
 Dge-06 - 30 avril 2012 à 17:06
Bonjour,





J'aimerais solliciter votre soutient concernant l'affichage dans un slideshow. En bref, j'ai un slideshow javascript qui me conviens parfaitement, sauf que j'aimerais permettre a l'utilisateur d'arriver directement sur le slide numero 3 par exemple.

(je maîtrise assez bien le php, mais pas vraiment le javascript, d'ou la raison de ce post)

Voici le code javascript du slideshow:
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	//Configuration
		  var retour = true;
		  var tempsTransition = 1000;
		  var affichePlayPause = false;
		  var lectureAutomatique = false;
		  	var tempsAttente = 6000;
			
		  var icones = new Array();
		  		icones['play'] = 'img/play_slider.png';
		  		icones['pause'] = 'img/pause_slider.png';	
			
		  var currentPosition = 0;
		  var slideWidth = 840;
		  var slides = $('.slide');
		  var numberOfSlides = slides.length;
		  var interval;
		  var lectureEnCours = false;
  // Supprime la scrollbar en JS
  $('#slidesContainer').css('overflow', 'hidden');

  // Attribue  #slideInner  à toutes les div .slide
  slides
    .wrapAll('<div id="slideInner"></div>')
    // Float left to display horizontally, readjust .slides width
	.css({
      'float' : 'left',
      'width' : slideWidth
    });

  // Longueur de #slideInner égale au total de la longueur de tous les slides
  $('#slideInner').css('width', slideWidth * numberOfSlides);

  // Insert controls in the DOM
  $('#slideshow')
    .prepend('<span class="control" id="leftControl">Précédent</span>')
    .append('<span class="control" id="rightControl">Suivant</span>');


  
  // Hide left arrow control on first load
  manageControls(currentPosition);

  //Crée un écouteur d'évènement de type clic sur les classes .control
  $('.control')
    .bind('click', function(){
		
    // Determine la nouvelle position
	currentPosition = ($(this).attr('id')=='rightControl') ? currentPosition+1 : currentPosition-1;
    
	if(currentPosition == numberOfSlides && retour == false ){
		currentPosition--;
		pause();
	}
	
	// Cache ou montre les controles
    manageControls(currentPosition);
    // Fais bouger le slide
    $('#slideInner').animate({
      'marginLeft' : slideWidth*(-currentPosition)
    },tempsTransition);
  });

  // manageControls: Cache ou montre les flêches de controle en fonction de la position courante
  function manageControls(position){
    // Cache la fleche "précédent" si on est sur le premier slide
	if(position==0){ $('#leftControl').hide() } else{ $('#leftControl').show() }
	// Cache la fleche "suivant" si on est sur le dernier slide (et que le retour automatique n'est pas activé)
    if(position==numberOfSlides-1 && retour == false){
		$('#rightControl').hide();
	} else {
		$('#rightControl').show();
	}
	if(position == numberOfSlides && retour == true){
		currentPosition = 0;
		 $('#leftControl').hide();
	}
  }
  function suivant(){
	$('#rightControl').click();
	}
  function start() {
  	lectureEnCours = true;
    interval = setInterval(suivant, tempsAttente );
  }
  function pause() {
  	lectureEnCours = false;
   clearInterval(interval);
  }
  
 //Si le diapo est activé 
if(lectureAutomatique == true){
  start();
}
if(affichePlayPause == true){
	$('#slidesContainer').prepend('<img id="navDiapo" src="" alt="Navigation diaporama" />');
	if(lectureAutomatique == true){
		$('#navDiapo').attr('src',icones['pause']);
	}else{
		$('#navDiapo').attr('src',icones['play']);	
	}
	$('#navDiapo').bind('click', function(){
		if(lectureEnCours == true){
			$(this).attr('src',icones['play']);
			pause();
		}else{
			$(this).attr('src',icones['pause']);
			start();
		}
	});
}


  	
});
</script>


Et voici le code dans ma page php

<div id="pageContainer">
  <div id="slideshow">
    <div id="slidesContainer">
     <div class="slide">
     <?php include("kit.php") ;?>
      </div>
      
      <div class="slide">
      <?php include("etapes.php") ;?>
      </div>
      
      <div class="slide">
      <?php include("savoir_faire.php") ;?>
      </div>
    </div>
  </div>
</div>



Donc, comme je le disais, le slideshow fonctionne bien, j'arrive directement sur le premier slide, celui qui includ kit.php.
Et lorsque je clic sur la flèche vers la gauche, je vois bien la suivant, donc etapes.php, ainsi de suite.

Cependant, j'aimerais que dans certaines condition avant d'arriver sur la page, je puisse arriver directement sur le slide 2 ou 3. En utilisant _GET par exemple.

J'ai bien essayé de modifier la variable position dans le script javascript

var icones = new Array();
		  		icones['play'] = '<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/img/play_slider.png';
		  		icones['pause'] = '<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/img/pause_slider.png';	
			
		  var currentPosition = <?php if(isset($_GET['posi'])) { echo $_GET['posi']; } else { echo 0;}  ?>;
		  var slideWidth = 840;


Malheureusement, ça ne fonctionne pas vraiment, j'arrive bien en position 2 par exemple, mais je vois le premier slide, et lorsque je clic la flèche gauche pour aller au slide suivant, je bascule bien au slide 3 directement comme prévu. Le seul problème donc, c'est d'afficher le slide qui correspond a la position.

J'espère que mon explication n'est pas trop confuse.

Je travail directement sur le serveur d'hebergement de mon client:
http://cluster003.ovh.net/~kitaentr/index.php?page=slide1

Merci d'avance pour votre soutien
A voir également:

7 réponses

steeve.c Messages postés 2 Date d'inscription samedi 9 avril 2011 Statut Membre Dernière intervention 19 octobre 2011 1
19 oct. 2011 à 09:06
Une personne m'a rectifier le code sur un autre forum, je le post ici au cas certaines personnes aient le même besoin.

Il fallait ajouter :
$('#slideInner').css({marginLeft: slideWidth * (-currentPosition)}); 



Juste avant la fin, du coup, avec $_GET['posi'], j'indique le numero du slide a afficher.

Merci a venegal du forum codingforums:
http://www.codingforums.com/showthread.php?t=241180


Voici le code javascript final:

<script type="text/javascript" src="<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/includ/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
	//Configuration
		  var retour = true;
		  var tempsTransition = 1000;
		  var affichePlayPause = false;
		  var lectureAutomatique = false;
		  var tempsAttente = 6000;
			
		  var icones = new Array();
		  icones['play'] = '<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/img/play_slider.png';
		  icones['pause'] = '<?php echo $this->baseurl ?>/templates/<?php echo $this->template ?>/img/pause_slider.png';	
			
		  var currentPosition = <?php if(isset($_GET['posi'])) { echo $_GET['posi']; } else { echo 0;}  ?>;
		  var slideWidth = 840;
		  var slides = $('.slide');
		  var numberOfSlides = slides.length;
		  var interval;
		  var lectureEnCours = false;
  // Supprime la scrollbar en JS
  $('#slidesContainer').css('overflow', 'hidden');

  // Attribue  #slideInner  à toutes les div .slide
  slides
    .wrapAll('<div id="slideInner"></div>')
    // Float left to display horizontally, readjust .slides width
	.css({
      'float' : 'left',
      'width' : slideWidth
    });

  // Longueur de #slideInner égale au total de la longueur de tous les slides
  $('#slideInner').css('width', slideWidth * numberOfSlides);

  // Insert controls in the DOM
  $('#slideshow')
    .prepend('<span class="control" id="leftControl">Précédent</span>')
    .append('<span class="control" id="rightControl">Suivant</span>');


  
  // Hide left arrow control on first load
  manageControls(currentPosition);

  //Crée un écouteur d'évènement de type clic sur les classes .control
  $('.control')
    .bind('click', function(){
		
    // Determine la nouvelle position
	currentPosition = ($(this).attr('id')=='rightControl') ? currentPosition+1 : currentPosition-1;
    
	if(currentPosition == numberOfSlides && retour == false ){
		currentPosition--;
		pause();
	}
	
	// Cache ou montre les controles
    manageControls(currentPosition);
    // Fais bouger le slide
    $('#slideInner').animate({
      'marginLeft' : slideWidth*(-currentPosition)
    },tempsTransition);
  });

  // manageControls: Cache ou montre les flêches de controle en fonction de la position courante
  function manageControls(position){
    // Cache la fleche "précédent" si on est sur le premier slide
	if(position==0){ $('#leftControl').hide() } else{ $('#leftControl').show() }
	// Cache la fleche "suivant" si on est sur le dernier slide (et que le retour automatique n'est pas activé)
    if(position==numberOfSlides-1 && retour == false){
		$('#rightControl').hide();
	} else {
		$('#rightControl').show();
	}
	if(position == numberOfSlides && retour == true){
		currentPosition = 0;
		 $('#leftControl').hide();
	}
  }
  function suivant(){
	$('#rightControl').click();
	}
  function start() {
  	lectureEnCours = true;
    interval = setInterval(suivant, tempsAttente );
  }
  function pause() {
  	lectureEnCours = false;
   clearInterval(interval);
  }
  
 //Si le diapo est activé 
if(lectureAutomatique == true){
  start();
}
if(affichePlayPause == true){
	$('#slidesContainer').prepend('<img id="navDiapo" src="" alt="Navigation diaporama" />');
	if(lectureAutomatique == true){
		$('#navDiapo').attr('src',icones['pause']);
	}else{
		$('#navDiapo').attr('src',icones['play']);	
	}
	$('#navDiapo').bind('click', function(){
		if(lectureEnCours == true){
			$(this).attr('src',icones['play']);
			pause();
		}else{
			$(this).attr('src',icones['pause']);
			start();
		}
	});
}

$('#slideInner').css({marginLeft: slideWidth * (-currentPosition)});  
  	
});

</script>
1
SteeveC Messages postés 8 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 30 avril 2012 1
30 avril 2012 à 16:38
Alors, même chose, je suis sur de rien, mais peut etre avec cette partie du code

// Determine la nouvelle position
currentPosition = ($(this).attr('id')=='rightControl') ? currentPosition+1 : currentPosition-1;

En inversant dans le genre

// Determine la nouvelle position
currentPosition = ($(this).attr('id')=='rightControl') ? currentPosition-1 : currentPosition+1;
1
Parfait, c'est ça!! merci encore :)
0
Bonjour,

J'arrive un peu tard, mais j'utilise aussi ce slide et je voudrais savoir si quelqu'un sais comment faire en sorte que ça défile tout seul toute les X secondes svp??

Merci d'avance.
0
Alors je suis pas expert en javascript, mais je suis a l'origine de ce post

Sans avoir testé je dirais qu'il faut tester du coté de cette partie du code posté plus haut

function start() {
lectureEnCours = true;
interval = setInterval(suivant, tempsAttente );
}

en remplacent TempsAttente par 3 ou 3000 si c des miliseconde
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Parfait, ça marche!!!! merciiiii
0
et pour la direction, vous savez ou ça se trouve? Car actuellement, il défile de droite à gauche, et moi je voudrais faire le contraire: de gauche à droite

Une idée?
0
SteeveC Messages postés 8 Date d'inscription lundi 20 juillet 2009 Statut Membre Dernière intervention 30 avril 2012 1
30 avril 2012 à 16:39
Ou encore en inversant ici:
// Insert controls in the DOM
$('#slideshow')
.prepend('<span class="control" id="leftControl">Précédent</span>')
.append('<span class="control" id="rightControl">Suivant</span>');

// Insert controls in the DOM
$('#slideshow')
.prepend('<span class="control" id="rightControl">Précédent</span>')
.append('<span class="control" id="leftControl">Suivant</span>');
0